No, not really. I’ll show you how…
Also from the sister thread:
I was away from keyboard for the weekend and I thought about opening the sale to existing holders for 24 hours before the thing.
It’s relatively simple. Here is some PSEUDOCODE:
// or move month to the future to allow more time for marketing efforts
timestamp DateStart = 11th of January 2020 16:00 UTC
timestamp CurrentHoldersOpenWindow = 1 day
uint PNKSnapshotAmount = PNK.getBalaceOfAtBlock(someblock, msg.sender)
// ...in the buy() function...
if (PNKPurchasedNow <= PNKSnapshotAmount) { // bying within our limit
require(time.now > DateStart)
} else { // more PNK than the amount allowe
require(time.now > DateStart + CurrentHoldersOpenWindow)
}
The buyer will have to calculate themselves on the on the front-end how much PNK they are allowed to buy in the initial opening period.
If they have 100k PNK
but send ETH to but 110k PNK
rather than calculating refunds on the smart contract, we are simply reverting.
https://etherscan.io/token/0x93ed3fbe21207ec2e8f2d3c3de6e058cb73bc04d#balances - 139 holders with 100k or more. I think that 25-30% will take part in the 2nd round of sale, no need to overengineer.