Как использовать PaymentSplitter для проекта ERC721.

Когда вы создаете проект на блокчейне, например проект NFT, вы можете рассчитывать на получение какой-то оплаты. В основном от чеканки новых токенов или вторичных продаж.

Но если вы не единственный разработчик, как вы будете платить другим разработчикам, художникам или маркетологам? Вы можете вручную платить им каждый раз, когда снимаете средства, или вы можете позволить им делать это самостоятельно, используя PaymentSplitter, и быть уверенными, что они не могут снимать больше, чем им причитается.

Что такое PaymentSplitter?

PaymentSplitter - это решение с открытым исходным кодом для справедливого распределения средств по блокчейну. Обычно он инициализируется во время развертывания контракта и является неизменным, если вы не переопределите и не добавите функциональность для добавления и удаления payees.

PaymentSplitter следует вытягивающей модели для платежей. Это означает, что получатели могут вывести средства из контракта. Вместо того, чтобы как-то посылать из контракта.

Получатели не могут получать больше, чем их доля , которая прозрачно и надежно регулируется контрактом. Вы также можете запросить конкретные акции и высвободившиеся средства получателя из контракта. Это помогает с прозрачностью.

Получатель добавляется во время инициализации вместе с долей, которую они получают в процентах. Получатель может снимать средства с помощью функции receive и добавления своего адреса в качестве параметра. Получателей можно найти с помощью payee(index), а акции - с помощью shares(account). Попробуем реализовать это сейчас.

Как внедрить PaymentSplitter?

Внедрить PaymentSplitter в существующий или новый контракт очень просто благодаря замечательной команде OpenZeppelin. Я воспользуюсь контрактом простой NFT для его реализации. Но можно использовать любой контракт.

Во-первых, нам нужно обновить импортированные из OpenZeppelin контракты, включив в них контракт PaymentSplitter.

Добавляя эту строку кода (Строка 8), мы добавляем контракт PaymentSplitter от OpenZeppelin без необходимости добавлять файл самостоятельно.

Затем нам нужно немного обновить наш constructor, чтобы передать некоторые переменные в контракт PaymentSplitter.

Мы добавляем параметры _payees и _shares, которые будут использоваться constructor PaymentSplitter. Мы передаем эти переменные при развертывании контракта.

Развертывание с параметрами с помощью HardHat

Я не буду вдаваться в подробности развертывания контракта с HardHat в этой статье, но я покажу вам, как добавить правильные параметры для контракта PaymentSplitter.

С помощью следующего простого сценария развертывания мы развернем наш контракт в выбранной вами цепочке.

В параметрах NFT.deploy() вам нужно добавить соответствующие переменные, которые в нашем случае представляют собой массив адресов, за которым следует массив долей в процентах.

Наш 0xExample контракт сможет снять 60% от общей суммы, а 0xExample2 сможет снять только 40%.

PaymentSplitter не выводит средства напрямую из доступных средств, поэтому вы не сможете постоянно выводить 60% доступных средств. Вы будете снимать, и вы сможете снять больше, только когда для вас будет больше денег. Вы можете легко протестировать это в Remix без развертывания в тестовой сети.

Вывод

Я могу быть предвзятым, поскольку использую этот контракт в своем последнем проекте NFT, но я думаю, что команда OpenZeppelin проделала потрясающую работу. Контракт не может быть проще заключить, и он отлично работает. Больше не нужно спорить с командой по поводу выплат, просто позвольте им взять свою долю на себя.

Большое спасибо за чтение и удачного дня.

Посмотрите мою последнюю коллекцию NFT здесь.

Поддержите меня, поддерживая Medium, и станьте участником.

Подписывайтесь на меня в Twitter, чтобы не отставать от меня.