-
-
Save andrew-fleming/6d99d68a55be6228b0b5c1ca4c58dc90 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 | |
func a_increase_balance{ | |
syscall_ptr : felt*, pedersen_ptr : HashBuiltin*, | |
range_check_ptr}(amount : felt): | |
let (res) = balance.read() | |
balance.write(res + amount) | |
return () | |
end | |
func a_get_balance{ | |
syscall_ptr : felt*, pedersen_ptr : HashBuiltin*, | |
range_check_ptr}() -> (res : felt): | |
let (res) = balance.read() | |
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
%lang starknet | |
from starkware.cairo.common.cairo_builtins import HashBuiltin | |
@storage_var | |
func balance() -> (res : felt): | |
end | |
func b_increase_balance{ | |
syscall_ptr : felt*, pedersen_ptr : HashBuiltin*, | |
range_check_ptr}(amount : felt): | |
let (res) = balance.read() | |
balance.write(res + amount) | |
return () | |
end | |
func b_get_balance{ | |
syscall_ptr : felt*, pedersen_ptr : HashBuiltin*, | |
range_check_ptr}() -> (res : felt): | |
let (res) = balance.read() | |
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
%lang starknet | |
from starkware.cairo.common.cairo_builtins import HashBuiltin | |
from openzeppelin.a import a_get_balance, a_increase_balance | |
from openzeppelin.b import b_get_balance, b_increase_balance | |
@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