Cryptopunk Sales and Traders
Which 10 wallets are the most successful Cryptopunk traders? Successful could either mean the wallet has accumulated a large balance from sales or has accumulated a large number of Punks. Explain your methodology and findings.
Approach
At first, this bounty looks very easy, but if we want precise information, there are many subtle details in it, and we have tried our best to make it as precise as possible.
Limitation
- ETH price information only available since ‘2020-05-05’, causing
nft_price_usd
become zero before that date. However it is acceptable since CP (Cryptopunks) NFTs value at that time is respectively very low
Transactions
NFT Sale Tx is coarsely divided into 2 types
1.) NFT in ERC-20 form (project_name
= cryptopunks)
2.) NFT in ERC-721 form (project_name
= wrapped cryptopunks & Wrapped CryptoPunks V1)
In ERC-20 form (project_name
= cryptopunks), there are 2 types of origin_function_signature
0x8264fe98: buyPunk(uint256 punkIndex)
This is the most simple function, and is the majority of CP sale Tx. We can simply grab information fromethereum.core.ez_nft_sales
table.0x23165b75: acceptBidForPunk(uint256 punkIndex, uint256 minPrice)
For this function, we cannot simply get information fromethereum.core.ez_nft_sales
as it will show
BUYER_ADDRESS
= 0x0000000000000000000000000000000000000000
, and does not show NFT price.
We decide to get information of this type of Tx from ethereum.core.fact_transactions
table as we can get NFT price and punkIndex from input_data
column, and get seller and buyer from tx_json
column
In ERC-721 form (project_name
= wrapped cryptopunks )
0xa4ddbaa6: buy(address token, uint256 tokenId, uint256 price, uint256 sellerFee, tuple signature)
=> buy in www.wrappedpunks.com platform
we get this information from ethereum.core.fact_event_logs
table where punkIndex, NFT price, seller and buyer are contained in EVENT_INPUTS
column
0xab834bab: atomicMatch_(address[14] addrs, uint256[18] uints, uint8[8] feeMethodsSidesKindsHowToCalls, bytes calldataBuy, bytes calldataSell, bytes replacementPatternBuy, bytes replacementPatternSell, bytes staticExtradataBuy, bytes staticExtradataSell, uint8[2] vs, bytes32[5] rssMetadata)
=> buy or accept bid in Opensea platform
we can simply get sale information from ethereum.core.ez_nft_sales
table
project_name
= Wrapped CryptoPunks V1
0xb4e4b296: matchAskWithTakerBidUsingETHAndWETH(tuple takerBid, tuple makerAsk)
0x38e29209: matchAskWithTakerBid(tuple takerBid, tuple makerAsk)
0x3b6d032e: matchBidWithTakerAsk(tuple takerAsk, tuple makerBid)
0xe99a3f80
=> buy or accept bid in LooksRare or Rarible platform
we can simply get sale information from ethereum.core.ez_nft_sales
table
Conclusions
Top 10 collectors with details are shown above
- The winner is
0x1919db36ca2fa2e15f9000fd9cdc2edcf863e685
with 354 CPs, he bought 777 CPs and sold 423 CPs, with total lost of 62.9M USD
Top 10 profitable traders with details are shown above
- The winner is
0x6639c089adfba8bb9968da643c6be208a70d6daa
with 54M profit, he bought 20 CPs and sold 189 CPs
Note that this information is from sale in marketplaces only.
We can see many weird result like the winner of profitable traders, he has negative sum of CPs equal to -179.
This happens from OTC trade, where the sale is made between users without central marketplace.
Top 10 Collectors and Profitable Traders
The Top10 CP Collectors and Profitable Traders are depicted below including more information of their
Total NFT bought, Total USD spent, Total NFTs sold, Total USD gained, Total NFTs occupied, and total profit gained
Top collectors
The winner is 0x1919db36ca2fa2e15f9000fd9cdc2edcf863e685
with 354 CPs, he bought 777 CPs and sold 423 CPs, with total lost of 62.9M USD
The runner up is 0x650dcdeb6ecf05ae3caf30a70966e2f395d5e9e5
with 106 CPs, he bought 106 CPs and does not sell any, with lost of 7M USD
The 10th is 0x5f7190b7943858b7bdd24f069241612091c6a986
with 42 CPs, he bought 61 CPs and sold 19 CPs, with 73k USD profit
5 out of 10 only bought, no sale
4 out of 10 have positive total profit
Top Profitable Traders
The winner is 0x6639c089adfba8bb9968da643c6be208a70d6daa
with 54M profit, he bought 20 CPs and sold 189 CPs
The runner up is 0x6611fe71c233e4e7510b2795c242c9a57790b376
with 34M profit, he bought 67 CPs and sold 209 CPs
The 10th is 0x0232d1083e970f0c78f56202b9a666b526fa379f
with 14M profit, he bought 2 CPs and sold 136 CPs
10 out of 10 have negative sum of NFTs holding
We try to double check obtained result with information in CP website here
We found that number of NFTs held in wallets does not match with our result at all, not even close !!
However, wallet by wallet, number of NFTs bought and sold is nearly matched.
What is happening? it’s OTC (Over The Counter) trade.
The sale information we obtained so far is from sales that occur in the central market, like Opensea.
However, most of users seem like to trade OTC; negotiate then transfer NFTs and money to each other without using any market platform.
These NFTs Tx would appear in ethereum.core.ez_nft_transfers
table.
For more information, the winner of top collectors 0x1919db36ca2fa2e15f9000fd9cdc2edcf863e685
, his ENS name is punksotc.eth.
Hypothetically, this address is made for OTC trade, that’s why it has total NFTs of 354, but it really has only 3 when check in the website, because most NFTs were sold OTC.

Background
What is a CryptoPunk?
The CryptoPunks are 24x24 pixel art images, generated algorithmically. Most are punky-looking guys and girls, but there are a few rarer types mixed in: Apes, Zombies and even the odd Alien. Every punk has their own profile page that shows their attributes as well as their ownership/for-sale status (here's an example). source
Wrapped Cryptopunks
Wrapped Punks are ERC721 Tokens, each one backed 1:1 by an original Cryptopunk by Larvalabs. source