Skip to content

Commit

Permalink
Fix chain_id % 2**53
Browse files Browse the repository at this point in the history
  • Loading branch information
ClementWalter committed Aug 28, 2024
1 parent fa62f10 commit 3ae018e
Show file tree
Hide file tree
Showing 19 changed files with 184 additions and 226 deletions.
36 changes: 1 addition & 35 deletions cairo1_contracts/token/src/lib.cairo
Original file line number Diff line number Diff line change
@@ -1,35 +1 @@
#[starknet::contract]
mod StarknetToken {
use openzeppelin::token::erc20::ERC20Component;
use starknet::ContractAddress;

component!(path: ERC20Component, storage: erc20, event: ERC20Event);

#[abi(embed_v0)]
impl ERC20Impl = ERC20Component::ERC20Impl<ContractState>;
#[abi(embed_v0)]
impl ERC20MetadataImpl = ERC20Component::ERC20MetadataImpl<ContractState>;
impl ERC20InternalImpl = ERC20Component::InternalImpl<ContractState>;

#[storage]
struct Storage {
#[substorage(v0)]
erc20: ERC20Component::Storage
}

#[event]
#[derive(Drop, starknet::Event)]
enum Event {
#[flat]
ERC20Event: ERC20Component::Event
}

#[constructor]
fn constructor(ref self: ContractState, initial_supply: u256, recipient: ContractAddress) {
let name = "MyToken";
let symbol = "MTK";

self.erc20.initializer(name, symbol);
self.erc20._mint(recipient, initial_supply);
}
}
mod starknet_token;
35 changes: 35 additions & 0 deletions cairo1_contracts/token/src/starknet_token.cairo
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
#[starknet::contract]
mod StarknetToken {
use openzeppelin::token::erc20::ERC20Component;
use starknet::ContractAddress;

component!(path: ERC20Component, storage: erc20, event: ERC20Event);

#[abi(embed_v0)]
impl ERC20Impl = ERC20Component::ERC20Impl<ContractState>;
#[abi(embed_v0)]
impl ERC20MetadataImpl = ERC20Component::ERC20MetadataImpl<ContractState>;
impl ERC20InternalImpl = ERC20Component::InternalImpl<ContractState>;

#[storage]
struct Storage {
#[substorage(v0)]
erc20: ERC20Component::Storage
}

#[event]
#[derive(Drop, starknet::Event)]
enum Event {
#[flat]
ERC20Event: ERC20Component::Event
}

#[constructor]
fn constructor(ref self: ContractState, initial_supply: u256, recipient: ContractAddress) {
let name = "MyToken";
let symbol = "MTK";

self.erc20.initializer(name, symbol);
self.erc20._mint(recipient, initial_supply);
}
}
72 changes: 37 additions & 35 deletions kakarot_scripts/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ class NetworkType(Enum):
if WEB3.is_connected():
chain_id = WEB3.eth.chain_id
else:
chain_id = starknet_chain_id
chain_id = starknet_chain_id % 2**53
except (
requests.exceptions.ConnectionError,
requests.exceptions.MissingSchema,
Expand All @@ -164,8 +164,8 @@ class NetworkType(Enum):
logger.info(
f"⚠️ Could not get chain Id from {NETWORK['rpc_url']}: {e}, defaulting to KKRT"
)
chain_id = int.from_bytes(b"KKRT", "big")
starknet_chain_id = int.from_bytes(b"KKRT", "big")
chain_id = starknet_chain_id % 2**53


class ChainId(IntEnum):
Expand All @@ -181,57 +181,59 @@ class ChainId(IntEnum):
or "0x20eB005C0b9c906691F885eca5895338E15c36De",
16,
)
SOURCE_DIR = Path("src")
SOURCE_DIR_FIXTURES = Path("tests/fixtures")
CONTRACTS = {p.stem: p for p in list(SOURCE_DIR.glob("**/*.cairo"))}
CONTRACTS_FIXTURES = {p.stem: p for p in list(SOURCE_DIR_FIXTURES.glob("**/*.cairo"))}
CAIRO_ZERO_DIR = Path("src")
CAIRO_DIR = Path("cairo1_contracts")
TESTS_DIR = Path("tests")

CONTRACTS = {
p.stem: p
for p in (
list(CAIRO_ZERO_DIR.glob("**/*.cairo"))
+ list(TESTS_DIR.glob("**/*.cairo"))
+ list(CAIRO_DIR.glob("**/*.cairo"))
)
}

BUILD_DIR = Path("build")
BUILD_DIR_FIXTURES = BUILD_DIR / "fixtures"
BUILD_DIR.mkdir(exist_ok=True, parents=True)
BUILD_DIR_FIXTURES.mkdir(exist_ok=True, parents=True)
BUILD_DIR_SSJ = BUILD_DIR / "ssj"

DATA_DIR = Path("kakarot_scripts") / "data"


class ArtifactType(Enum):
cairo0 = 0
cairo1 = 1


DEPLOYMENTS_DIR = Path("deployments") / NETWORK["name"]
DEPLOYMENTS_DIR.mkdir(exist_ok=True, parents=True)

COMPILED_CONTRACTS = [
{"contract_name": "kakarot", "is_account_contract": False},
{"contract_name": "account_contract", "is_account_contract": True},
{"contract_name": "uninitialized_account_fixture", "is_account_contract": False},
{"contract_name": "uninitialized_account", "is_account_contract": False},
{"contract_name": "BalanceSender", "is_account_contract": False},
{"contract_name": "Counter", "is_account_contract": False},
{"contract_name": "ERC20", "is_account_contract": False},
{"contract_name": "EVM", "is_account_contract": False},
{"contract_name": "kakarot", "is_account_contract": False},
{"contract_name": "MockPragmaOracle", "is_account_contract": False},
{"contract_name": "OpenzeppelinAccount", "is_account_contract": True},
{"contract_name": "ERC20", "is_account_contract": False},
{"contract_name": "replace_class", "is_account_contract": False},
{"contract_name": "Counter", "is_account_contract": False},
{"contract_name": "StarknetToken", "is_account_contract": False},
{"contract_name": "uninitialized_account_fixture", "is_account_contract": False},
{"contract_name": "uninitialized_account", "is_account_contract": False},
{"contract_name": "UniversalLibraryCaller", "is_account_contract": False},
]
DECLARED_CONTRACTS = [
{"contract_name": "account_contract", "cairo_version": ArtifactType.cairo0},
{
"contract_name": "uninitialized_account_fixture",
"cairo_version": ArtifactType.cairo0,
},
{"contract_name": "uninitialized_account", "cairo_version": ArtifactType.cairo0},
{"contract_name": "EVM", "cairo_version": ArtifactType.cairo0},
{"contract_name": "OpenzeppelinAccount", "cairo_version": ArtifactType.cairo0},
{"contract_name": "Cairo1Helpers", "cairo_version": ArtifactType.cairo1},
{"contract_name": "Cairo1HelpersFixture", "cairo_version": ArtifactType.cairo1},
{"contract_name": "replace_class", "cairo_version": ArtifactType.cairo0},
{"contract_name": "Counter", "cairo_version": ArtifactType.cairo0},
{"contract_name": "MockPragmaOracle", "cairo_version": ArtifactType.cairo1},
{"contract_name": "StarknetToken", "cairo_version": ArtifactType.cairo1},
{"contract_name": "ERC20", "cairo_version": ArtifactType.cairo0},
{"contract_name": "kakarot", "cairo_version": ArtifactType.cairo0},
{"contract_name": "UniversalLibraryCaller", "cairo_version": ArtifactType.cairo1},
"account_contract",
"Cairo1Helpers",
"Cairo1HelpersFixture",
"Counter",
"ERC20",
"EVM",
"kakarot",
"MockPragmaOracle",
"OpenzeppelinAccount",
"replace_class",
"StarknetToken",
"uninitialized_account_fixture",
"uninitialized_account",
"UniversalLibraryCaller",
]

# PRE-EIP155 TX
Expand Down
32 changes: 6 additions & 26 deletions kakarot_scripts/deploy_kakarot.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,7 @@ async def main():
account = await get_starknet_account()
logger.info(f"ℹ️ Using account 0x{account.address:064x} as deployer")

class_hash = {
contract["contract_name"]: await declare(contract)
for contract in DECLARED_CONTRACTS
}
class_hash = {contract: await declare(contract) for contract in DECLARED_CONTRACTS}
dump_declarations(class_hash)

# %% Deployments
Expand Down Expand Up @@ -88,7 +85,7 @@ async def main():
)
freshly_deployed = True

if NETWORK["type"] is NetworkType.STAGING:
if NETWORK["type"] is NetworkType.STAGING or NETWORK["type"] is NetworkType.DEV:
starknet_deployments["EVM"] = await upgrade(
"EVM",
account.address, # owner
Expand All @@ -101,21 +98,8 @@ async def main():
)
starknet_deployments["Counter"] = await upgrade("Counter")
starknet_deployments["MockPragmaOracle"] = await upgrade("MockPragmaOracle")

if NETWORK["type"] is NetworkType.DEV:
starknet_deployments["EVM"] = await deploy_starknet(
"EVM",
account.address, # owner
ETH_TOKEN_ADDRESS, # native_token_address_
class_hash["account_contract"], # account_contract_class_hash_
class_hash["uninitialized_account"], # uninitialized_account_class_hash_
class_hash["Cairo1Helpers"],
COINBASE,
BLOCK_GAS_LIMIT,
)
starknet_deployments["Counter"] = await deploy_starknet("Counter")
starknet_deployments["MockPragmaOracle"] = await deploy_starknet(
"MockPragmaOracle"
starknet_deployments["UniversalLibraryCaller"] = await upgrade(
"UniversalLibraryCaller"
)

dump_deployments(starknet_deployments)
Expand All @@ -124,11 +108,7 @@ async def main():
logger.info(f"ℹ️ Found default EVM address {EVM_ADDRESS}")
from kakarot_scripts.utils.kakarot import get_eoa

amount = (
0.02
if NETWORK["type"] is not (NetworkType.DEV or NetworkType.STAGING)
else 100
)
amount = 100 if NETWORK["type"] is NetworkType.DEV else 0.01
await get_eoa(amount=amount)

# Set the base fee if freshly deployed
Expand All @@ -153,7 +133,7 @@ async def main():
CREATEX_DEPLOYER, CREATEX_SIGNED_TX, amount=0.3, name="CreateX"
)

if NETWORK["type"] is (NetworkType.DEV or NetworkType.STAGING):
if NETWORK["type"] is NetworkType.STAGING or NETWORK["type"] is NetworkType.DEV:
bridge = await deploy_evm("CairoPrecompiles", "EthStarknetBridge")
evm_deployments["Bridge"] = {
"address": int(bridge.address, 16),
Expand Down
15 changes: 12 additions & 3 deletions kakarot_scripts/utils/kakarot.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,9 @@
from kakarot_scripts.utils.starknet import get_starknet_account
from kakarot_scripts.utils.starknet import invoke as _invoke_starknet
from kakarot_scripts.utils.starknet import wait_for_transaction
from kakarot_scripts.utils.uint256 import int_to_uint256
from tests.utils.constants import TRANSACTION_GAS_LIMIT
from tests.utils.helpers import pack_calldata, rlp_encode_signed_data
from tests.utils.uint256 import int_to_uint256

logging.basicConfig()
logger = logging.getLogger(__name__)
Expand Down Expand Up @@ -316,7 +316,16 @@ def dump_deployments(deployments):

def get_deployments():
try:
return json.load(open(DEPLOYMENTS_DIR / "kakarot_deployments.json", "r"))
return {
name: {
**value,
"address": int(value["address"], 16),
"starknet_address": int(value["starknet_address"], 16),
}
for name, value in json.load(
open(DEPLOYMENTS_DIR / "kakarot_deployments.json", "r")
).items()
}
except FileNotFoundError:
return {}

Expand Down Expand Up @@ -561,7 +570,7 @@ async def eth_send_transaction(

payload = {
"type": 0x1,
"chainId": NETWORK["chain_id"] % 2**32,
"chainId": NETWORK["chain_id"],
"nonce": nonce,
"gas": gas,
"gasPrice": gas_price,
Expand Down
Loading

0 comments on commit 3ae018e

Please sign in to comment.