Skip to content

Instantly share code, notes, and snippets.

@sungkhum
Created February 2, 2024 04:13
Show Gist options
  • Save sungkhum/1a6b3fdfcbe10c2f8e587ac1d4b50014 to your computer and use it in GitHub Desktop.
Save sungkhum/1a6b3fdfcbe10c2f8e587ac1d4b50014 to your computer and use it in GitHub Desktop.
Calculate DeSo Historical Creator Coin Price
# This only calculates the locked deso for now
'''
The DeSo GraphQL Queries:
Creator Coin Buys/Sells (you'll need the base64 publickey for that): https://graphql-prod.deso.com/?explorerURLState=N4IgJg9gxgrgtgUwHYBcQC4QEcYIE4CeABAIq6EAUAJAGYCWeAziukQJKoA0RVAhjSnysAwjCYQ83WnQA2gvKwCCNGgiiCwABRgAjGXSgBpBAQBis%2BVIlh8AIQKsA2stXqEW3fqMnGAeTw2ePYAhAC6UlAQSGB0KHRRSipqGtp6BsYEwlExcVEAlETAADpIRGVE-K4pnuk%2BFPRyQjwNlkT0TCzNDMzc-PKsfAL43NZ2DjyjQQTckdGx8UgDszkLBcWl5WVIEDaMhSWbmyh4vEiMvOoL%2BxuH5SgAHkgAKgQADggHt3f3HDb3ALIIFC8MC8YGfL5EOKIZi8OCvCFfV41bwERG3B5IQHgm5fVQIABypwgjHR5QAvmSytCELD4WTKbiyq9eABzBAcGgQa6Q5BgUTiPBUogAC14jAJCHuKE0bI%2BTKIjM2SsVIE4IAAbrw8HReHpaRgQOsykUQO1mKbWABWAAMds4n1NfXwlqISBgMhkDo2ppaLowPPKpuRaVRruNh1NCBwvBkTwgrtNtmEAEYAJoAGVZrzwEBoAFUAEoAJgAysISBnbBBXgSkAAJABWAHYRVBTHACXQnsWAMwALS5ADY00gABoAUUMpag-cMmjoWhIOgA7mPTYjyd7NqbMS93uGyVGY3GEwGUynN9ugyBjqdzpcooeFbvHtjeM-IabZsC6GdP5CRCmpouYNAgqReBkiYgIorysjowj-JoQ4ANaaFgvg6Ioxb5v8KBwFAYAAOoAOKmAALIwAAijDRAAXgAUvWRH3HgrwAJzFihigAPRMBuCplCqyqbp8W6OiAkz2NBTxsP8E6lk8ihIQA%2BlRCnCKa17ftk8xPgGEYmiAdDUTArxeGCHwBjQsaMPKQklOSaogCKCAgvgjCGhuIAgOSQA
All Buy Now NFT sales: https://graphql-prod.deso.com/?explorerURLState=N4IgJg9gxgrgtgUwHYBcQC4QEcYIE4CeABAIIBmZCUKCYACjAEYA2AllANIIEDOAFABIyrZjTzpSFKjXpM2nbgDERYgDREBUCEjCsUrbRPKVqtBi3ZcCAYW27929QIh4w%2BAEIEJAbWPSzcpbcPADyrh4EAIQAugCURMAAOkhERACGUqayFgq8fMKi%2BBJCKvjqWjp6BkjFFfbV6i5ueJ7FTRHxSSmpREgQbjwJyT09KHhpSDxp1NVD3SOpKAAeSAAqBAAOCMMLi0sAkjoISwCyCChpYGkXO7v6iDwXcBu3PQC%2Brx-dX28gqiAANzSeFYaRYCB4GBAXVSiRABTEcIkMJ6cI2gVySLmuzhCBwaWYqwgWLh7msAEYAJoAGQA5hs8BAyABVABKACYAMrWACK1PcEA2ADkkAAJABWAHYABZQRRwIWsVbsgDMAC0yBAAGyUpAADQAohxOVA1Rw6Kx6DzGAB3PVwz6qV5wsYTKYzbRYlEjF0rdZbL2vH0gVhILHeIMLckADkjqWikbeTvmqJAy0OblO50u1zSgZTwYqF1DPEDICFilWrIgBAJ%2BghZwuVxuGCGIGseAQ1xc5nkVncaR4CAArNHrNKqABrEkgMlUukMplsrm8-mCkUSmVyhVK1Ua7W6w3G03my10a12uFJuNEOH7HjuGAEIUQG3uS1Ysa4L67H-vZ3fMmsIgHUVSeq23q3iGPAACIwBs8jXNsrZkASQ47Ne3Rwu0LQEDOqz7CcBqcqsJAnHQAD6MHEdYDpIF8fwgBOlz4JCmAOiAIBvEAA
All Accepted Bid NFT Sales: https://graphql-prod.deso.com/?explorerURLState=N4IgJg9gxgrgtgUwHYBcQC4QEcYIE4CeABAIIBmZCUKCYACjAEYA2AllANIIEDOAFABIyrZjTzpSFKjXpM2nbgDERYgDREBUCEjCsUrbRPKVqtBi3ZcCAYW27929QIh4w%2BAEIEJAbWPSzcpbcPADyrh4EAIQAugCURMAAOkhERACGUqayFgq8fMKi%2BBJCKvjqWjp6BkjFFfbV6i5ueJ7FTRHxSSmpREgQbjwJyT09KHhpSDxp1NVD3SOpKAAeSAAqBAAOCMMLi0sAkjoISwCyCChpYGkXO7v6iDwXcBu3PQC%2Brx-dX28gqiAANzSeFYaRYCB4GBAXVSiRABTEcIkMJ6cI2gVySLmuzhCBwaWYqwgWLh7msAEYAJoAGQA5hs8BAyABVABKACYAMrWACK1PcEA2ADkkAAJABWAHYABZQRRwIWsVbsgDMAC0yBAAGyUpAADQAohxOVA1Rw6Kx6DzGAB3PVwz6qV5wsYTKYzbRYlEjF0rdZbL2vH0gVhILHeIMLcmSyOpaKRt5O%2BaokDLQ5uU7nS7XNKB5PBioXUM8QMgIWKVasiAEAn6CFnC5XG4YIYgax4BDXFzmeRWdxpHgIACsAA5rNKqABrEkgMlUukMplsrm8-mCkUSmVyhVK1Ua7W6w3G03my10a12uFvL67G-vHaJnZwupVT0t71EOGsHgAERgG3ka5thbMgCUHB8k1hEB2haAgZ1WfYTgNTlVhIE46AAfR-ZDrAdJBfn%2BCdLnwSFMAdEAQDeIA
'''
def compute_price_from_transactions(cc_transactions, bid_transactions, buy_now_transactions):
creator_coin_deso_nanos = 0 # Variable to store creator coin deso nanos
nft_deso_nanos = 0 # Variable to store NFT-related deso nanos
all_transactions = []
# Process creator coin transactions
for node in cc_transactions["data"]["affectedPublicKeys"]["nodes"]:
transaction = node["transaction"]
txn_type = transaction["txnType"]
txn_data = transaction["txIndexMetadata"]
timestamp = transaction["timestamp"]
if txn_type == 11: # Creator coin transaction
creator_coin_deso_nanos += txn_data["DESOLockedNanosDiff"]
all_transactions.append((timestamp, txn_data["DESOLockedNanosDiff"]))
# Process NFT bid transactions
for node in bid_transactions["data"]["affectedPublicKeys"]["nodes"]:
transaction = node["transaction"]
txn_data = transaction["txIndexMetadata"]
timestamp = transaction["timestamp"]
nft_deso_nanos += txn_data["NFTRoyaltiesMetadata"]["CreatorCoinRoyaltyNanos"]
all_transactions.append((timestamp, txn_data["NFTRoyaltiesMetadata"]["CreatorCoinRoyaltyNanos"]))
# Process NFT buy now transactions
for node in buy_now_transactions["data"]["affectedPublicKeys"]["nodes"]:
transaction = node["transaction"]
txn_data = transaction["txIndexMetadata"]
timestamp = transaction["timestamp"]
nft_deso_nanos += txn_data["NFTRoyaltiesMetadata"]["CreatorCoinRoyaltyNanos"]
all_transactions.append((timestamp, txn_data["NFTRoyaltiesMetadata"]["CreatorCoinRoyaltyNanos"]))
# Combine creator coin and NFT deso nanos for total locked calculation
deso_locked_nanos = creator_coin_deso_nanos + nft_deso_nanos
# Sort transactions by timestamp
all_transactions.sort(key=lambda x: x[0])
deso_locked = round(deso_locked_nanos / 1e9, 3)
return deso_locked
# Example usage
locked_deso_in_coin = compute_price_from_transactions(creator_coin_transactions, nft_bid_transactions, nft_buy_now_transactions)
print(f"Locked Deso in Coin: {locked_deso_in_coin}")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment