Support "Pay What You Want" Collects
Summary
I have created a new type of Collect Module that allows users to "pay what you want". This affords collectors the ability to use any denomination of any ERC-20 token to collect a publication.
Mainnet: 0x7fbD7496CaE2DAcad7a62350DA8488E31eC026eA
Testnet: 0x3d06AA6ca4FC7eE0D5581B85CB52CA7714175e43
Notes
- This is a Collect Module, NOT a standalone Open Action Module. It is meant to be used with the core
CollectPublicationActionmodule. - The publication author can optionally specify a desired currency and price floor.
Implement
The init calldata is almost identical to MultirecipientFeeCollectModule :
[
{ type: "uint160", name: "amountFloor" },
{ type: "uint96", name: "collectLimit" },
{ type: "address", name: "currency" },
{ type: "uint16", name: "referralFee" },
{ type: "bool", name: "followerOnly" },
{ type: "uint72", name: "endTimestamp" },
{
type: "tuple(address,uint16)[5]",
name: "recipients",
components: [
{ type: "address", name: "recipient" },
{ type: "uint16", name: "split" },
],
},
]
and the process calldata:
[
{ type: "address", name: "currency" },
{ type: "uint256", name: "amount" },
]
CollectPublicationAction
This Collect Module is registered with the CollectPublicationAction (the same module used with SimpleFeeCollectModule and MultirecipientFeeCollectModule). The init calldata is just the Collect Module address and the encoded collect init calldata (above):
[
{ type: 'address', name: 'collectModule' },
{ type: 'bytes', name: 'collectModuleInitData' },
]
And to process:
[
{ type: "address", name: "collectNftRecipient" },
{ type: "bytes", name: "collectData" },
]
Testnet
I have completed a successful act call with the PWYW module: https://amoy.polygonscan.com/tx/0xceff77ea12000814d07d3e8bc2b0218ae6ff91e286a08d91872e97b817f4a259