-
-
Save koloz193/18cb491167e844e9a28ac69825f68975 to your computer and use it in GitHub Desktop.
Storage variable clashing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
%lang starknet | |
from starkware.cairo.common.cairo_builtins import HashBuiltin | |
@storage_var | |
func balance() -> (res : felt): | |
end | |
namespace A: | |
func increase_balance{ | |
syscall_ptr : felt*, pedersen_ptr : HashBuiltin*, | |
range_check_ptr}(amount : felt): | |
let (res) = balance.read() | |
balance.write(res + amount) | |
return () | |
end | |
func get_balance{ | |
syscall_ptr : felt*, pedersen_ptr : HashBuiltin*, | |
range_check_ptr}() -> (res : felt): | |
let (res) = balance.read() | |
return (res) | |
end | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
%lang starknet | |
from starkware.cairo.common.cairo_builtins import HashBuiltin | |
@storage_var | |
func balance() -> (res : felt): | |
end | |
namespace B: | |
func increase_balance{ | |
syscall_ptr : felt*, pedersen_ptr : HashBuiltin*, | |
range_check_ptr}(amount : felt): | |
let (res) = balance.read() | |
balance.write(res + amount) | |
return () | |
end | |
func get_balance{ | |
syscall_ptr : felt*, pedersen_ptr : HashBuiltin*, | |
range_check_ptr}() -> (res : felt): | |
let (res) = balance.read() | |
return (res) | |
end | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
%lang starknet | |
from starkware.cairo.common.cairo_builtins import HashBuiltin | |
from openzeppelin.a import A | |
from openzeppelin.b import B | |
@external | |
func increase_balance_a{ | |
syscall_ptr : felt*, pedersen_ptr : HashBuiltin*, | |
range_check_ptr}(amount : felt): | |
A.increase_balance(amount) | |
return () | |
end | |
@external | |
func increase_balance_b{ | |
syscall_ptr : felt*, pedersen_ptr : HashBuiltin*, | |
range_check_ptr}(amount : felt): | |
B.increase_balance(amount) | |
return () | |
end | |
@view | |
func get_balance_a{ | |
syscall_ptr : felt*, pedersen_ptr : HashBuiltin*, | |
range_check_ptr}() -> (res : felt): | |
let (res) = A.get_balance() | |
return (res) | |
end | |
@view | |
func get_balance_b{ | |
syscall_ptr : felt*, pedersen_ptr : HashBuiltin*, | |
range_check_ptr}() -> (res : felt): | |
let (res) = B.get_balance() | |
return (res) | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import pytest | |
from starkware.starknet.testing.starknet import Starknet | |
from utils import contract_path | |
@pytest.mark.asyncio | |
async def test_clash(): | |
starknet = await Starknet.empty() | |
public_contract = await starknet.deploy( | |
contract_path("openzeppelin/c.cairo") | |
) | |
await public_contract.increase_balance_a(99).invoke() | |
await public_contract.increase_balance_b(100).invoke() | |
balance_one = await public_contract.get_balance_a().call() | |
print("Should be 99: ", balance_one.result.res) # prints 199 | |
balance_two = await public_contract.get_balance_b().call() | |
print("Should be 100: ", balance_two.result.res). # prints 199 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment