Skip to content
This repository has been archived by the owner on Dec 15, 2023. It is now read-only.

Commit

Permalink
Skip address precalculation on successful deployment (#92)
Browse files Browse the repository at this point in the history
  • Loading branch information
FabijanC authored May 3, 2022
1 parent 070a002 commit 9ac4811
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 41 deletions.
66 changes: 33 additions & 33 deletions starknet_devnet/starknet_wrapper.py
Original file line number Diff line number Diff line change
Expand Up @@ -151,42 +151,42 @@ async def deploy(self, deploy_transaction: Deploy):
else:
tx_hash = deploy_transaction.calculate_hash(state.general_config)

contract_address = calculate_contract_address(
caller_address=0,
constructor_calldata=deploy_transaction.constructor_calldata,
salt=deploy_transaction.contract_address_salt,
contract_definition=deploy_transaction.contract_definition
)

starknet = await self.get_starknet()

if contract_address not in self.__address2contract_wrapper:
try:
contract = await starknet.deploy(
contract_def=contract_definition,
constructor_calldata=deploy_transaction.constructor_calldata,
contract_address_salt=deploy_transaction.contract_address_salt
)
execution_info = contract.deploy_execution_info
error_message = None
status = TxStatus.ACCEPTED_ON_L2

self.__address2contract_wrapper[contract.contract_address] = ContractWrapper(contract, contract_definition)
await self.__update_state()
except StarkException as err:
error_message = err.message
status = TxStatus.REJECTED
execution_info = DummyExecutionInfo()

await self.__store_transaction(
transaction=deploy_transaction,
contract_address=contract_address,
tx_hash=tx_hash,
status=status,
execution_info=execution_info,
error_message=error_message,
contract_hash=state.state.contract_states[contract_address].state.contract_hash
try:
contract = await starknet.deploy(
contract_def=contract_definition,
constructor_calldata=deploy_transaction.constructor_calldata,
contract_address_salt=deploy_transaction.contract_address_salt
)
contract_address = contract.contract_address
execution_info = contract.deploy_execution_info
error_message = None
status = TxStatus.ACCEPTED_ON_L2

self.__address2contract_wrapper[contract.contract_address] = ContractWrapper(contract, contract_definition)
await self.__update_state()
except StarkException as err:
error_message = err.message
status = TxStatus.REJECTED
execution_info = DummyExecutionInfo()

contract_address = calculate_contract_address(
caller_address=0,
constructor_calldata=deploy_transaction.constructor_calldata,
salt=deploy_transaction.contract_address_salt,
contract_definition=deploy_transaction.contract_definition
)

await self.__store_transaction(
transaction=deploy_transaction,
contract_address=contract_address,
tx_hash=tx_hash,
status=status,
execution_info=execution_info,
error_message=error_message,
contract_hash=state.state.contract_states[contract_address].state.contract_hash
)

return contract_address, tx_hash

Expand Down
10 changes: 10 additions & 0 deletions test/test_general_workflow.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,16 @@ def test_general_workflow():
contract_path=EVENTS_CONTRACT_PATH,
salt="0x99",
inputs=None,
expected_status="ACCEPTED_ON_L2",
expected_address=EXPECTED_SALTY_DEPLOY_ADDRESS,
expected_tx_hash=EXPECTED_SALTY_DEPLOY_HASH
)

assert_salty_deploy(
contract_path=EVENTS_CONTRACT_PATH,
salt="0x99",
inputs=None,
expected_status="REJECTED",
expected_address=EXPECTED_SALTY_DEPLOY_ADDRESS,
expected_tx_hash=EXPECTED_SALTY_DEPLOY_HASH
)
Expand Down
15 changes: 7 additions & 8 deletions test/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -303,14 +303,13 @@ def assert_block_hash(latest_block_number, expected_block_hash):
assert_equal(block["block_hash"], expected_block_hash)
assert_equal(block["status"], "ACCEPTED_ON_L2")

def assert_salty_deploy(contract_path, inputs, salt, expected_address, expected_tx_hash):
"""Run twice deployment with salt. Expect the same output."""
for i in range(2):
print(f"Running deployment {i + 1})")
deploy_info = deploy(contract_path, inputs, salt=salt)
assert_tx_status(deploy_info["tx_hash"], "ACCEPTED_ON_L2")
assert_equal(deploy_info["address"], expected_address)
assert_equal(deploy_info["tx_hash"], expected_tx_hash)
def assert_salty_deploy(contract_path, inputs, salt, expected_status, expected_address, expected_tx_hash):
"""Deploy with salt and assert."""

deploy_info = deploy(contract_path, inputs, salt=salt)
assert_tx_status(deploy_info["tx_hash"], expected_status)
assert_equal(deploy_info["address"], expected_address)
assert_equal(deploy_info["tx_hash"], expected_tx_hash)

def assert_failing_deploy(contract_path):
"""Run deployment for a contract that's expected to be rejected."""
Expand Down

0 comments on commit 9ac4811

Please sign in to comment.