Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

♻️ tests refactoring #41

Merged
merged 9 commits into from
Aug 25, 2022
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions tests/integrations/minter/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
user:
bal7hazar marked this conversation as resolved.
Show resolved Hide resolved
admin: 1000
anyone: 1001

nft:
name: Project
symbol: NFT

token:
name: Token
symbol: TOK
decimals: 6
initial_supply: 1000000

minter:
public_sale_open: 0
max_buy_per_tx: 5
unit_price: 10
max_supply_for_mint: 10
reserved_supply_for_mint: 4

whitelist:
slots: 5
merkle_root: 3236969588476960619958150604131083087415975923122021901088942336874683133579
merkle_proof:
- 1489335374474017495857579265074565262713421005832572026644103123081435719307
merkle_proof_len: 1
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,70 @@ from openzeppelin.security.safemath import SafeUint256
from interfaces.minter import ICarbonableMinter
from interfaces.CarbonableProjectNFT import IERC721, IERC721_Enumerable, ICarbonableProjectNFT

func setup{syscall_ptr : felt*, pedersen_ptr : HashBuiltin*, range_check_ptr}():
alloc_locals
local carbonable_minter
local merkle_root
%{
# Load config
import yaml
with open("./tests/integrations/minter/config.yml", 'r') as file_instance:
config = yaml.safe_load(file_instance)
for section, subconfig in config.items():
for key, value in subconfig.items():
name = f"{section.lower()}_{key.lower()}"
setattr(context, name, value)

# ERC-721 deployment
context.project_nft_contract = deploy_contract(
"./src/nft/project/CarbonableProjectNFT.cairo",
{
"name": context.nft_name,
"symbol": context.nft_symbol,
"owner": context.user_admin,
},
).contract_address

# ERC-20 deployment
context.payment_token_contract = deploy_contract(
"./tests/mocks/token/erc20.cairo",
{
"name": context.token_name,
"symbol": context.token_symbol,
"decimals": context.token_decimals,
"initial_supply": context.token_initial_supply,
"recipient": context.user_anyone
},
).contract_address

# Minter deployment
context.carbonable_minter_contract = deploy_contract(
"./src/mint/minter.cairo",
{
"owner": context.user_admin,
"project_nft_address": context.project_nft_contract,
"payment_token_address": context.payment_token_contract,
"public_sale_open": context.minter_public_sale_open,
"max_buy_per_tx": context.minter_max_buy_per_tx,
"unit_price": context.minter_unit_price,
"max_supply_for_mint": context.minter_max_supply_for_mint,
"reserved_supply_for_mint": context.minter_reserved_supply_for_mint,
},
).contract_address

# Externalize required variables
ids.carbonable_minter = context.carbonable_minter_contract
ids.merkle_root = context.whitelist_merkle_root
%}

# Transfer project nft ownershop from admin to minter
admin_instance.transferOwnership(carbonable_minter)
# Set merkle tree root to minter contract
admin_instance.set_whitelist_merkle_root(merkle_root)

return ()
end

namespace project_nft_instance:
# Internals

Expand Down Expand Up @@ -276,7 +340,7 @@ namespace admin_instance:

func get_address() -> (address : felt):
tempvar admin
%{ ids.admin = context.ADMIN %}
%{ ids.admin = context.user_admin %}
return (admin)
end

Expand Down Expand Up @@ -444,27 +508,27 @@ namespace anyone_instance:

func get_address() -> (address : felt):
tempvar anyone
%{ ids.anyone = context.ANYONE %}
%{ ids.anyone = context.user_anyone %}
return (anyone)
end

func get_slots() -> (slots : felt):
tempvar slots
%{ ids.slots = context.SLOTS %}
%{ ids.slots = context.whitelist_slots %}
return (slots)
end

func get_proof_len() -> (proof_len : felt):
tempvar proof_len
%{ ids.proof_len = context.PROOF_LEN %}
%{ ids.proof_len = context.whitelist_merkle_proof_len %}
return (proof_len)
end

func get_proof() -> (proof : felt*):
alloc_locals
let (proof : felt*) = alloc()
let (local proof : felt*) = alloc()
%{
for index, node in enumerate(context.PROOF):
for index, node in enumerate(context.whitelist_merkle_proof):
memory[ids.proof + index] = node
%}
return (proof)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,92 +4,19 @@
%lang starknet

# Starkware dependencies
from starkware.cairo.common.cairo_builtins import HashBuiltin
from starkware.cairo.common.bool import TRUE, FALSE
from starkware.cairo.common.cairo_builtins import HashBuiltin

# Project dependencies
from tests.integrations.library import (
carbonable_minter_instance,
project_nft_instance,
payment_token_instance,
from tests.integrations.minter.library import (
setup,
admin_instance as admin,
anyone_instance as anyone,
)

@view
func __setup__{syscall_ptr : felt*, pedersen_ptr : HashBuiltin*, range_check_ptr}():
alloc_locals
tempvar carbonable_minter
tempvar whitelist_merkle_root = 3236969588476960619958150604131083087415975923122021901088942336874683133579
%{
# --- INITIAL SETTINGS ---
# User addresses
context.ADMIN = 1000
context.ANYONE = 1001
# CarbonableProjectNFT
context.NFT_NAME = 'Carbonable ERC-721 Test'
context.NFT_SYMBOL = 'CET'
# Payment token
context.TOKEN_NAME = 'StableCoinToken'
context.TOKEN_SYMBOL = 'SCT'
context.TOKEN_DECIMALS = 6
context.TOKEN_INITIAL_SUPPLY = 1000000
# CarbonableMint
context.PUBLIC_SALE_OPEN = ids.FALSE
context.MAX_BUY_PER_TX = 5
context.UNIT_PRICE = 10
context.MAX_SUPPLY_FOR_MINT = 10
context.RESERVED_SUPPLY_FOR_MINT = 4
# Whitelist ANYONE
context.SLOTS = 5
context.PROOF = [
1489335374474017495857579265074565262713421005832572026644103123081435719307,
]
context.PROOF_LEN = len(context.PROOF)

# ERC-721 deployment
context.project_nft_contract = deploy_contract(
"./src/nft/project/CarbonableProjectNFT.cairo",
{
"name": context.NFT_NAME,
"symbol": context.NFT_SYMBOL,
"owner": context.ADMIN,
},
).contract_address

# ERC-20 deployment
context.payment_token_contract = deploy_contract(
"./tests/mocks/token/erc20.cairo",
{
"name": context.TOKEN_NAME,
"symbol": context.TOKEN_SYMBOL,
"decimals": context.TOKEN_DECIMALS,
"initial_supply": context.TOKEN_INITIAL_SUPPLY,
"recipient": context.ANYONE
},
).contract_address

# Minter deployment
context.carbonable_minter_contract = deploy_contract(
"./src/mint/minter.cairo",
{
"owner": context.ADMIN,
"project_nft_address": context.project_nft_contract,
"payment_token_address": context.payment_token_contract,
"public_sale_open": context.PUBLIC_SALE_OPEN,
"max_buy_per_tx": context.MAX_BUY_PER_TX,
"unit_price": context.UNIT_PRICE,
"max_supply_for_mint": context.MAX_SUPPLY_FOR_MINT,
"reserved_supply_for_mint": context.RESERVED_SUPPLY_FOR_MINT,
},
).contract_address
ids.carbonable_minter = context.carbonable_minter_contract
%}

# Transfer project nft ownershop from admin to minter
admin.transferOwnership(carbonable_minter)
admin.set_whitelist_merkle_root(whitelist_merkle_root)

setup()
return ()
end

Expand Down
19 changes: 19 additions & 0 deletions tests/integrations/yield/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
user:
bal7hazar marked this conversation as resolved.
Show resolved Hide resolved
admin: 1000
anyone: 1001

nft:
name: Project
symbol: NFT

token:
name: Token
symbol: TOK
decimals: 6
initial_supply: 1000000

carbonable_token:
name: Carbonable
symbol: CARBZ
decimals: 6
initial_supply: 1000000
68 changes: 68 additions & 0 deletions tests/integrations/yield/library.cairo
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# SPDX-License-Identifier: MIT
# Carbonable smart contracts written in Cairo v0.1.0 (library.cairo)

%lang starknet

# Starkware dependencies
from starkware.cairo.common.cairo_builtins import HashBuiltin
from starkware.cairo.common.bool import TRUE, FALSE

func setup{syscall_ptr : felt*, pedersen_ptr : HashBuiltin*, range_check_ptr}():
%{
# Load config
import yaml
with open("./tests/integrations/yield/config.yml", 'r') as file_instance:
config = yaml.safe_load(file_instance)
for section, subconfig in config.items():
for key, value in subconfig.items():
name = f"{section.lower()}_{key.lower()}"
setattr(context, name, value)

# ERC-721 deployment
context.project_nft_contract = deploy_contract(
"./src/nft/project/CarbonableProjectNFT.cairo",
{
"name": context.nft_name,
"symbol": context.nft_symbol,
"owner": context.user_admin,
},
).contract_address

# Reward token ERC-20 deployment
context.reward_token_contract = deploy_contract(
"./tests/mocks/token/erc20.cairo",
{
"name": context.token_name,
"symbol": context.token_symbol,
"decimals": context.token_decimals,
"initial_supply": context.token_initial_supply,
"recipient": context.user_anyone
},
).contract_address

# Carbonable token ERC-20 deployment
context.carbonable_token_contract = deploy_contract(
"./tests/mocks/token/erc20.cairo",
{
"name": context.carbonable_token_name,
"symbol": context.carbonable_token_symbol,
"decimals": context.carbonable_token_decimals,
"initial_supply": context.carbonable_token_initial_supply,
"recipient": context.user_anyone
},
).contract_address

# Yield Manager deployment
context.yield_manager_contract = deploy_contract(
"./src/yield/yield_manager.cairo",
{
"owner": context.user_admin,
"project_nft_address": context.project_nft_contract,
"carbonable_token_address": context.carbonable_token_contract,
"reward_token_address": context.reward_token_contract,
},
).contract_address
%}

return ()
end
Loading