Skip to content

Stork-Oracle/starknet-utils

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 

Repository files navigation

Utilities for Starknet

Felt Packing

Until further optimizations are implemented, storage on StarkNet is still expensive. You can read this excellent analysis to learn more. A reasonable way to "work around this" in the future is to refund fees paid for reused storage between L1 updates, since it will not incur L1 fees. But alas, this isn't the case today.

In the interim, felts can safely fit 252 bits, which is a fair amount of data (e.g. 7 32-bit ints, 31 ASCII characeters, etc).

The provided libraries allow you to "stuff" or "pack" multiple values into a single felt.

For example, you can pack a 32-bit timestamp, 32-bit price, and a short oracle name in a single felt, and still have headroom to spare.

    # Example using
    # --------------------------------------------------------------------------------- #
    # | timestamp (32 bits)     | price (32 bits)              |   oracle (80 bits)   | #
    # | Eg. 1655239252          | 12303.01*10**2               |   Stork              | #  
    # --------------------------------------------------------------------------------- #
    
    schema = [('timestamp', 32), ('price', 32), ('oracle', 80)]
    price = int(12303.01*10**2)
    oracle = int('Stork'.encode('ascii').hex(),16)
    
    entries = {
        'timestamp': 1655239252,
        'price': price, 
        'oracle': oracle
    }

    packed_felt = pack(entries, schema)
    # packed_felt => 8594493568284625242442550301055646065193579

And then the same values can be unpacked in Cairo:

execution_info = await contract.unpack_felt(packed_felt=8594493568284625242442550301055646065193579, schema=[80,32,32]).call()
# execution_info.result => [1655239252, 1230301, 358435746411]

Just note that the schema order has to be reversed in Cairo (32,32,80 in Python vs. 80,32,32 in Cairo – ofc feel free to reverse it programmatically, e.g. using https://github.com/gaetbout/starknet-array-manipulation)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published