Skip to content

Commit

Permalink
Add assert view call and public/private sheet
Browse files Browse the repository at this point in the history
  • Loading branch information
ClementWalter committed Sep 10, 2023
1 parent 6b614b4 commit f91a964
Show file tree
Hide file tree
Showing 9 changed files with 32,785 additions and 25,825 deletions.
58,472 changes: 32,672 additions & 25,800 deletions packages/starksheet-cairo/build/Sheet.json

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"Sheet": "0x1759e57ef31878f7dc5695b7095a174997da09fde32e5bc1aeb2c9b70fcc56c",
"Sheet": "0x445105813c8991e4ebf482c2935a9b31cc8bd74f825a3aa255dbb9ed7f12619",
"Starksheet": "0x38e88274237b46e2296ee0109f3c0c6e7791afb54a3a0623d66b926a02eac2e",
"BasicCellRenderer": "0x2694071ff6342f6d05f4ae54ebd48533fb7be2a6056b07fa22520e08f4bca89",
"UriRenderer": "0x7a7c733fa4802f34d06d87fb990d5766ea4971f5ead396cbb655b2824d3235a",
Expand Down
16 changes: 8 additions & 8 deletions packages/starksheet-cairo/deployments/katana/deployments.json
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
{
"BasicCellRenderer": {
"address": "0x47ae818d59330d63ba514a2822179b01313a9f9bf38fc2aa2c71fce1a965721",
"tx": "0x1831e5720f59268f506318bae81de4598abbb012cca9cb1544561ac1648ee35",
"address": "0xfc692aabb36bd5c8bbf602e04ad0236555d5275ad5fa65e9192b4506da87f6",
"tx": "0x17566dfa98b9f82caff582dc8029ae639d43d4027e85627bc86d4a19193454f",
"artifact": "build/BasicCellRenderer.json"
},
"math": {
"address": "0x1885ddc5917c19b1fb805bbe6a2d41abf221aff0c9610793faff9a3529f2994",
"tx": "0x23226e2763cde9f709ae77effb23c74c631e9d693ccfda9d44db281ad2233cd",
"address": "0x490c4f3236f5ac5613e4b53fd4be8017ef06767a294e3f32f0f9cb1c231d0e4",
"tx": "0x3e16a6012ec63213500367e252222c0e2bba4ed5c7662cbdbc11b4e38b69b4",
"artifact": "build/math.json"
},
"execute": {
"address": "0x1f2cae998679b9a469156a08b99d8247ece51644ccb60625c65f68d15ecd4b0",
"tx": "0x4737b2541fd141fd2e1c96d382bd5f8a7e1b59ed16b1ebd594bf996c7502440",
"address": "0x8e0ce0873025dd49e51a2e92a4cdc490f121656830691c4d57da96f93df805",
"tx": "0x73f7cefcffb52182d65578cc1566eb894b5a302be607029ab7d9ec0d0e15ddf",
"artifact": "build/execute.json"
},
"Starksheet": {
"address": "0x540abc165710b1637d28c3a4f26a5d925b8fd79dbe6e0b8eb8d813c40683967",
"tx": "0x2ae87193d5214bddb08b792fc99f8ea3b43782afec4b9d6f5bac2bfa7d44500",
"address": "0x7f391ff818c724d50b057ab8aa3e6d8f7ec615e3cc581fc20cbeef07904290a",
"tx": "0x23ad0b65655e6efd09cd11fc039a4a3aad919dbc8bdedd9180f8ec3b1b2143a",
"artifact": "build/Starksheet.json"
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"Sheet": "0x1759e57ef31878f7dc5695b7095a174997da09fde32e5bc1aeb2c9b70fcc56c",
"Sheet": "0x445105813c8991e4ebf482c2935a9b31cc8bd74f825a3aa255dbb9ed7f12619",
"Starksheet": "0x38e88274237b46e2296ee0109f3c0c6e7791afb54a3a0623d66b926a02eac2e",
"BasicCellRenderer": "0x2694071ff6342f6d05f4ae54ebd48533fb7be2a6056b07fa22520e08f4bca89",
"UriRenderer": "0x7a7c733fa4802f34d06d87fb990d5766ea4971f5ead396cbb655b2824d3235a",
Expand Down
16 changes: 8 additions & 8 deletions packages/starksheet-cairo/deployments/testnet/deployments.json
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
{
"BasicCellRenderer": {
"address": "0x6237eeb7702ef3035290a9794385b3754fc572ebd5d4cae9aa41a6c95612749",
"tx": "0x22b43a0cd75f3cd48465d83eba46ab7f58b879034c186b8b59b950b01d3ed84",
"address": "0x1c01a078d88a777ce1a7fe1e1b4007303a0bec8adacbc805a9d8c22017792d3",
"tx": "0x41a2c9f2bdb4fd89bfc4e58814ac6ccb3ec268d7cbbc15ee27ec2b4321ea4dc",
"artifact": "build/BasicCellRenderer.json"
},
"math": {
"address": "0x4c9f7e187a3901e9159306f56ed9432a95bf6cc51a22772193ff6da0118650b",
"tx": "0x36964d61d13a79130a517916a7daf8a8fef8f9d4136b6b5b97884840d799c60",
"address": "0x29abfbcb8b48acedd671ec3c0a6e0f4dce8f41d35a67538538103402a2c171c",
"tx": "0x4a09c7074ab174f712d796610af3772b417296646d72b65104a127b7efe535a",
"artifact": "build/math.json"
},
"execute": {
"address": "0xfd903f33ef17ae68926c946fb7e6e4274a19464e1442116b9c920ba797703b",
"tx": "0x383dcd3bc190f365a00592a9c5907f318a8d984b4284bff1bf0b617131e043",
"address": "0x2e85f3d4c526745e1705f73893054e7c86fc1a92952037a483decd80d32c7de",
"tx": "0x7c284d25d7b52358bbb713772deefe36f2d3d2c7f5f9834662699b0dc5bc0b9",
"artifact": "build/execute.json"
},
"Starksheet": {
"address": "0x4d33345d5e0dd5e6b53317c2f1d11f148ecd9bce6a3dfa4870145080b6efbd5",
"tx": "0x5c0239f4af21a48b183333a469a2790fb0d0be3d39218b449aa01b8b2669d33",
"address": "0x6453a869dc429c26e576c74f901cb59359f24fa0515c4a0c218f970ae3c14bf",
"tx": "0x98b5c0f9b6c091605b8c66bab83d4e23699d0ec2c2057f5c50b71bcaf96860",
"artifact": "build/Starksheet.json"
}
}
54 changes: 48 additions & 6 deletions packages/starksheet-cairo/src/sheet/Sheet.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ from openzeppelin.token.erc721.enumerable.library import ERC721Enumerable
from openzeppelin.token.erc721.library import ERC721, ERC721_name, ERC721_symbol
from starkware.cairo.common.alloc import alloc
from starkware.cairo.common.bool import TRUE
from starkware.cairo.common.cairo_builtins import HashBuiltin, SignatureBuiltin
from starkware.cairo.common.cairo_builtins import HashBuiltin
from starkware.cairo.common.default_dict import default_dict_new, default_dict_finalize
from starkware.cairo.common.dict import DictAccess
from starkware.cairo.common.math_cmp import is_not_zero, RC_BOUND
Expand All @@ -20,10 +20,13 @@ from sheet.library import (
Sheet_merkle_root,
Sheet_max_per_wallet,
Sheet_cell_renderer,
Sheet_is_public,
CellRendered,
DEFAULT_VALUE,
)

from utils.execution_context import assert_view_call

@storage_var
func initialized() -> (res: felt) {
}
Expand Down Expand Up @@ -108,6 +111,20 @@ func getCellRenderer{syscall_ptr: felt*, pedersen_ptr: HashBuiltin*, range_check
return Sheet_cell_renderer.read();
}

@external
func setIsPublic{syscall_ptr: felt*, pedersen_ptr: HashBuiltin*, range_check_ptr}(is_public: felt) {
Ownable.assert_only_owner();
Sheet.set_is_public(is_public);
return ();
}

@view
func getIsPublic{syscall_ptr: felt*, pedersen_ptr: HashBuiltin*, range_check_ptr}() -> (
is_public: felt
) {
return Sheet.get_is_public();
}

@external
func setMerkleRoot{syscall_ptr: felt*, pedersen_ptr: HashBuiltin*, range_check_ptr}(root: felt) {
Ownable.assert_only_owner();
Expand Down Expand Up @@ -154,10 +171,9 @@ func getCell{syscall_ptr: felt*, pedersen_ptr: HashBuiltin*, range_check_ptr}(to
return (res.contract_address, res.value, res.calldata_len, res.calldata);
}

@view
func renderCell{syscall_ptr: felt*, pedersen_ptr: HashBuiltin*, range_check_ptr}(tokenId: felt) -> (
cell: CellRendered
) {
func _renderCell{syscall_ptr: felt*, pedersen_ptr: HashBuiltin*, range_check_ptr}(
tokenId: felt
) -> (cell: CellRendered) {
alloc_locals;
let (local rendered_cells_start) = default_dict_new(default_value=DEFAULT_VALUE);
let rendered_cells = rendered_cells_start;
Expand All @@ -171,19 +187,44 @@ func renderCell{syscall_ptr: felt*, pedersen_ptr: HashBuiltin*, range_check_ptr}
return (cell,);
}

@view
func renderCell{syscall_ptr: felt*, pedersen_ptr: HashBuiltin*, range_check_ptr}(tokenId: felt) -> (
cell: CellRendered
) {
alloc_locals;
assert_view_call();
return _renderCell(tokenId);
}

@view
func renderCellValue{syscall_ptr: felt*, pedersen_ptr: HashBuiltin*, range_check_ptr}(
tokenId: felt
) -> (value: felt) {
let (cell) = renderCell(tokenId);
assert_view_call();
let (cell) = _renderCell(tokenId);
return (cell.value,);
}

@external
func executeCell{syscall_ptr: felt*, pedersen_ptr: HashBuiltin*, range_check_ptr}(tokenId: felt) {
let (is_public) = Sheet_is_public.read();

if (is_public == 0) {
Ownable.assert_only_owner();
_renderCell(tokenId);
return ();
}

_renderCell(tokenId);
return ();
}

@view
func renderGrid{syscall_ptr: felt*, pedersen_ptr: HashBuiltin*, range_check_ptr}() -> (
cells_len: felt, cells: CellRendered*
) {
alloc_locals;
assert_view_call();
let (local cells: CellRendered*) = alloc();
let (local rendered_cells_start) = default_dict_new(default_value=DEFAULT_VALUE);
let rendered_cells = rendered_cells_start;
Expand Down Expand Up @@ -257,6 +298,7 @@ func mintAndSetPublic{pedersen_ptr: HashBuiltin*, syscall_ptr: felt*, range_chec
func tokenURI{syscall_ptr: felt*, pedersen_ptr: HashBuiltin*, range_check_ptr}(
tokenId: Uint256
) -> (token_uri_len: felt, token_uri: felt*) {
assert_view_call();
let (token_uri_len, token_uri) = Sheet.token_uri(tokenId);
return (token_uri_len, token_uri);
}
Expand Down
27 changes: 27 additions & 0 deletions packages/starksheet-cairo/src/sheet/library.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,10 @@ func Sheet_cell_price() -> (price: felt) {
func Sheet_royalty_rate() -> (rate: felt) {
}

@storage_var
func Sheet_is_public() -> (is_public: felt) {
}

namespace Sheet {
func get_cell_price{syscall_ptr: felt*, pedersen_ptr: HashBuiltin*, range_check_ptr}() -> (
price: felt
Expand Down Expand Up @@ -106,6 +110,29 @@ namespace Sheet {
return ();
}

func get_is_public{syscall_ptr: felt*, pedersen_ptr: HashBuiltin*, range_check_ptr}() -> (
is_public: felt
) {
return Sheet_is_public.read();
}

func set_is_public{syscall_ptr: felt*, pedersen_ptr: HashBuiltin*, range_check_ptr}(
is_public: felt
) {
Sheet_is_public.write(is_public);
return ();
}

func assert_public{syscall_ptr: felt*, pedersen_ptr: HashBuiltin*, range_check_ptr}(
is_public: felt
) {
let (is_public) = Sheet_is_public.read(is_public);
with_attr error_mesage("Sheet is private") {
assert is_public = 1;
}
return ();
}

func royalty_info{syscall_ptr: felt*, pedersen_ptr: HashBuiltin*, range_check_ptr}(
token_id: felt, sale_price: felt
) -> (receiver: felt, royalty_amount: felt) {
Expand Down
19 changes: 19 additions & 0 deletions packages/starksheet-cairo/src/utils/execution_context.cairo
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
%lang starknet

from starkware.starknet.common.syscalls import get_caller_address, get_tx_info
from starkware.cairo.common.cairo_builtins import HashBuiltin

// Since Starknet doesn't prevent @view entrypoint to be called during a
// tx, this utils lets ensure that not tx can be made by asserting that
// tx_info is 0
func assert_view_call{syscall_ptr: felt*, pedersen_ptr: HashBuiltin*, range_check_ptr}() {
alloc_locals;

let (tx_info) = get_tx_info();
with_attr error_mesage("Attempting to execute a @view") {
assert tx_info.account_contract_address = 0;
assert tx_info.signature_len = 0;
}

return ();
}
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ function ComputedCell({ cell }: ComputedCellProps) {
settleTransactions([
{
to: selectedSheetAddress,
entrypoint: "renderCell",
entrypoint: "executeCell",
calldata: [id],
},
]);
Expand Down

0 comments on commit f91a964

Please sign in to comment.