Home

Awesome

Mallows / BYOA Layer 2 Configuration Contract

Mallows / BYOA provides a mechanism for storing and running arbitrary code from NFT metadata. The byoa applications are provisioned on L1 Mainnet. This StarkNet contract provides an interface for a user to register one of these byoa applications to their StarkNet Layer 2 account.

Installation

You must have valid StarkNet contract and cario contract build resources installed on your build machine. You can follow the official documentation from the Cairo Lang website here.

Once your Cairo environment is configured, you can clone this repository and move to the Building instructions.

Building

starknet-compile contract.cairo --output contract_compiled.json --abi contract_abi.json

Testing

Ensure that the cairo-compile tool is installed before attempting to run the tests.

pytest test_contract.py

Running

# Set the desired StarkNet network to deploy to.
export STARKNET_NETWORK=alpha-goerli

# Deploy the contract and note the returned contract address
starknet deploy --contract contract_compiled.json

Interfaces

get_app_len(user)

Return the number of byoa apps that have been registered for a particular user's address.

get_app_array(user, index)

Return the app id at the specified index. Use get_app_len to know the length of the underlying array that you will be indexing into.

get_app_param_count(user, index)

For the app at the given index, return the number of parameters which have been configured for this specific app.

get_app_param_value_array(user, app_index, param_index)

For a given app at app_index for user account user, return the configured param at param_index. Use get_app_param_count to return the number of params which have been configured for a particular app.

add_app_id(app_id)

Authenticated users can add a new app_id to the list of installed apps. This method does not currently check for validity on L1, nor does it prevent double installs.

set_param_at_index(app_index, param_id, param_value)

Authenticated uesrs can set an arbitrary key,value pair for an installed app at app_index with key=param_id and value=param_value.

Interacting

You can interact directly with the contract using the StarkNet contract tools, such as starknet and by running starknet call.

Example for get_app_len

starknet call \
    --address DEPLOYED_CONTRACT_ADDRESS \
    --abi contract_abi.json \
    --function get_app_len \
    --inputs \
        ACCOUNT_ADDRESS \
    --signature \
        REPLACE_ME \
        REPLACE_ME

Releases

Currently in the beta phase, subject to frequent changes. Below we will list deployed contracts that map to a particular release.

Contributing

Please submit Pull Requests to start the discussion for improvements and enhancements to this contract. Currently it is maintained by the mallows.xyz team.