OpenZeppelin Contracts written in Cairo for StarkNet, a decentralized ZK Rollup

Overview

OpenZeppelin Cairo Contracts

A library for secure smart contract development written in Cairo for StarkNet, a decentralized ZK Rollup.

⚠️ WARNING! ⚠️

This is repo contains highly experimental code. Expect rapid iteration. Do not use in production.

Quickstart

A mashup between Cairo's quickstart and StarkWare's intro.

0. Install Cairo

We recommend working inside a python virtual environment, but you can also install the Cairo package directly. To create and enter the virtual environment, type:

python3.7 -m venv ~/cairo_venv
source ~/cairo_venv/bin/activate

Make sure the venv is activated – you should see (cairo_venv) in the command line prompt.

Make sure you can install the following pip packages: ecdsa, fastecdsa, sympy (using pip3 install ecdsa fastecdsa sympy). On Ubuntu, for example, you will have to first run:

sudo apt install -y libgmp3-dev

On Mac, you can use brew:

brew install gmp

Download the python package (cairo-lang-0.3.1.zip) from https://github.com/starkware-libs/cairo-lang/releases/tag/v0.3.1. To install it using pip, run:

pip3 install cairo-lang-0.3.1.zip

Cairo was tested with python3.7. To make it work with python3.6, you will have to install contextvars:

pip3 install contextvars

1. Clone the repo

git clone [email protected]:OpenZeppelin/cairo-contracts.git

Then cd into it and create a build directory:

cd cairo-contracts/
mkdir build

2. Compile the contracts

starknet-compile contracts/contract.cairo \
    --output build/contract_compiled.json \
    --abi build/contract_abi.json

3. Deploy to testnet

export STARKNET_NETWORK=alpha
starknet deploy --contract build/contract_compiled.json

4. Interact with it

starknet invoke \
    --address CONTRACT_ADDRESS \
    --abi build/contract_abi.json \
    --function increase_balance \
    --inputs 1234

The result should look like:

Invoke transaction was sent.
Contract address: 0x039564c4f6d9f45a963a6dc8cf32737f0d51a08e446304626173fd838bd70e1c
Transaction ID: 1

The following command allows you to query the transaction status based on the transaction ID that you got (here you’ll have to replace TRANSACTION_ID with the transaction ID printed by starknet invoke):

starknet tx_status --id TRANSACTION_ID

The possible statuses are:

  • NOT_RECEIVED: The transaction has not been received yet (i.e., not written to storage).
  • RECEIVED: The transaction was received by the operator.
  • PENDING: The transaction passed the validation and is waiting to be sent on-chain.
  • REJECTED: The transaction failed validation and thus was skipped.
  • ACCEPTED_ONCHAIN: The transaction was accepted on-chain.

Then we can query the balance:

starknet call \
    --address CONTRACT_ADDRESS \
    --abi build/contract_abi.json \
    --function get_balance

License

OpenZeppelin Cairo Contracts is released under the MIT License.

Comments
  • Feature/transfer-ownership-pattern-#275

    Feature/transfer-ownership-pattern-#275

    Resolves #304. This PR implements code in the Ownable contract to introduce a two step transfer ownership process plus zero address checks.

    This is optional as the original pattern is still present, however now contract owners can propose a new owner rather than directly transfer ownership. The new owner is required to accept the request before ownership is transferred. Both the owner and the proposed owner can cancel the request.

    The PR contains:

    • updated ownable.sol contract with zero address checks added too.
    • updated mock Ownable contract in the test directory.
    opened by ctrlc03 17
  • Reorganize contract directory structure

    Reorganize contract directory structure

    Base token contracts, their interfaces and presets are all thrown into the same folder today. We should think of a better way to organize files, with a focus on discoverability and ease of import paths declaration.

    enhancement 
    opened by martriay 11
  • Add erc1155

    Add erc1155

    Fixes #273.

    This PR implements the ERC1155 library contract and an ERC1155_Minable_Burnable implementation for testing purposes (to expose the internal _mint and _burn methods). It features a suite of tests which leverage the utils for caching and can be run in parallel. This work began at nethermind in Dec, was continued at Circularise and has roughly tracked the main repo since then. Sorry it took so long, and many thanks for your useful discussions @andrew-fleming.

    Please let me know of any changes needed and I'll try to get them done much sooner

    opened by dewi-tim 9
  • Test failure when following the README

    Test failure when following the README

    I have followed the README file and when I try to run tests with pytest I get the following error:

    (env) [email protected] cairo-contracts % pytest
    ========================================================= test session starts =========================================================
    platform darwin -- Python 3.8.7, pytest-6.2.5, py-1.10.0, pluggy-1.0.0
    rootdir: /Users/user/dev/cairo-contracts
    plugins: web3-5.24.0, hypothesis-6.24.0, eth-brownie-1.17.1, xdist-1.34.0, forked-1.3.0
    collected 0 items / 5 errors                                                                                                          
    
    =============================================================== ERRORS ================================================================
    _______________________________________________ ERROR collecting tests/test_Account.py ________________________________________________
    ImportError while importing test module '/Users/user/dev/cairo-contracts/tests/test_Account.py'.
    Hint: make sure your test modules/packages have valid Python names.
    Traceback:
    ../../.pyenv/versions/3.8.7/lib/python3.8/importlib/__init__.py:127: in import_module
        return _bootstrap._gcd_import(name[level:], package, level)
    tests/test_Account.py:3: in <module>
        from starkware.starknet.testing.starknet import Starknet
    E   ModuleNotFoundError: No module named 'starkware'
    
    

    shouldn't nile install take care of the dependencies?

    opened by poolpitako 9
  • erc20/library.cairo

    erc20/library.cairo "Transfer" event param "_from" not compatible with Starknet Python testing library

    📝 Details

    with Starkware official testing Python package: starkware/starknet/testing/contract_utils.py line 100, it encodes processed StarknetTransaction with namedtuple. Thus, calling erc20 Transfer with current OZ event signature

    @event
    func Transfer(_from : felt, to : felt, value : Uint256):
    end
    

    will fail with ValueError: Field names cannot start with an underscore: '_from'

    🔢 Code to reproduce bug

    In Python, try calling Transfer with this pattern tx = await erc20_contract.transfer(10, dst.contract_address).invoke(src) given

    • erc20_contract = erc20 contract
    • src = source account contract
    • dst = destination account contract
    opened by eddiexbank 8
  • ERC1155 Token

    ERC1155 Token

    Fixes #273

    This PR builds on previous ERC1155 work and abstracts standard into reusability.

    We have also included tokens in their own dirs, as it was becoming very cluttered

    This PR is a WIP, and do not expect it to be merged as-is.

    Note:

    • Struct arrays are not supported yet, so felts* are used instead of Uint256 for token arrays. Apparently, this feature will be in the next release.
    opened by ponderingdemocritus 8
  • `ERC721_burn` transfers control of token to non(Account)

    `ERC721_burn` transfers control of token to non(Account)

    The ERC721_burn function of the ERC721_base.cairo file attempts to clear approvals and delete the owner for a given tokenId. This attempt uses the pattern of setting the approval and owner address to be zero.

    In the EVM this workflow fits in with its account model. But in this Startnet environment, functions can actually be invoked with caller the "zero" address when not routed through a contract such as Account.cairo.

    This means that ERC721_burn actually makes the owner this "zero" address and now any user can seize control of this token by making calls not routed through such an Account.cairo contract.

    I will push a PR promptly that should fix this issue.

    opened by georgercarder 7
  • Increase the Nonce in account contract

    Increase the Nonce in account contract

    When I try sending execute method in Account contract, if the transaction is failed, the nonce is not update and I can't transfer again

    • Problem I tried creating a transaction and sent it. It's failed then I can't call the transaction anymore, unless I call another transaction to increase the nonce, then come back again
    • Solution So I think we can create an increase nonce method, to pass in the current nonce and update the nonce to the next nonce? So I can increase the nonce and call execute again.
    opened by ltdai010 7
  • Fix Wizard position in docs

    Fix Wizard position in docs

    Fixes #462. Moving the Wizard nav element right below Overview, and showing it in the same page from embedding script (as is done in Solidity contracts docs site).

    opened by ericnordelo 6
  • Add multicall

    Add multicall

    Since this feature requires a list of messages [Message] and each Message contains a list of arguments as calldata, it cannot be completed until Cairo supports passing an array of structs or at a least nested array simulating one to external functions.

    opened by martriay 6
  • Is the git tagging scheme applied as intended?

    Is the git tagging scheme applied as intended?

    I see this PR was merged recently: https://github.com/OpenZeppelin/cairo-contracts/pull/493 But the result looks suspicious to me. E.g. browsing the repo at tag v0.5.0, the source file of IAccount has v0.4.0 specified in its SPDX comment.

    opened by FabijanC 5
  • Support previous account versions

    Support previous account versions

    I recall having this conversation a few times offline and I now regret not having opened this issue earlier.

    The probem

    In order to check if a contract can accept tokens, the safeTransferFrom family of functions of ERC721 and ERC1155 checks among other things if a given contract is an account. To do so, it leverages ERC165 by returning TRUE when queried about a given interface ID, corresponding to accounts complying with the account interface.

    The problem is that the account interface and therefore the ID changed a few times now (less with time though 🤞) and it resulted in some token contracts not recognizing either old or new account IDs, just the single ID of the version they were used in.

    What to do

    Although I'm not sure how important it is to fix this in the short term considering:

    • this problem only prevents tokens to be sent to certain receivers, no funds are at risk or locked
    • any solution we provide can just affect new ERC721/1155 deployments
    • many account implementations out there, probably most of them, are upgradeable and therefore can keep up with the latest account ID therefore already compatible with new 721/1155 deployments
    • there's no account ID changes in the horizon as of now
    • StarkNet regenesis is not that far away

    But if we were to fix it anyway, we could have a helper is_account(address) function that checks for multiple account ids.

    opened by martriay 1
  • explore Cairo 1.0

    explore Cairo 1.0

    we should get familiar with the upcoming changes and get a clear picture of what it means for the project, breaking it down into smaller issues if necessary.

    opened by martriay 0
  • make base test suites available in released package

    make base test suites available in released package

    since users are responsible for manually exposing all the methods of libraries such as ERC20, ERC721, etc., it could be useful to make our base test suites like Ownable, ERC20, or ERC721 available for them to check their implementations.

    this could be either as a separate package or in the same one as the contracts library.

    opened by martriay 0
  • Provide an ERC20 preset using access lib

    Provide an ERC20 preset using access lib

    Currently, all the ERC20 presets use Ownable. It would be great if you could provide one more preset that uses AccessControl as well.

    To provide some context where this might be useful - I recently worked on an L1 <-> L2 bridge for a ERC20 token. When bridging from L1 -> L2, the L2 bridge contract (the one with @l1_handler) calls mint on the L2 ERC20 contract. Similarly, when bridging from L2 -> L1, the L2 bridge contract calls a custom burn function on the L2 ERC20 contract. To protect the minting and burning, I used the AccessControl library (since the bridge contract is not the owner of the ERC20 contract).

    Even though it's not too difficult to build, I think having a preset with more granular access control will be helpful.

    opened by milancermak 2
  • Improve account's `is_valid_signature`

    Improve account's `is_valid_signature`

    Following up on #372, Cairo's starkware.cairo.common.signature now exports a check_ecdsa_signature function that returns instead of reverting, allowing us to implement the desired version of isValidSignature in account contracts.

    https://github.com/starkware-libs/cairo-lang/blob/9889fbd522edc5eff603356e1912e20642ae20af/src/starkware/cairo/common/signature.cairo#L32-L34

    opened by martriay 0
Releases(v0.6.0)
  • v0.6.0(Dec 28, 2022)

    What's Changed

    Added

    • ERC1155 by @martriay in https://github.com/OpenZeppelin/cairo-contracts/pull/525
    • UDC docs by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/526
    • Warning notice for direct github installations by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/524

    Changed

    • Renamed isApprovedForAll return variable name (isApproved -> approved) in ERC721 by @martriay in https://github.com/OpenZeppelin/cairo-contracts/pull/525
    • Expanded dependent interfaces (e.g. IERC721.cairo now includes IERC165.cairo functions) by @martriay in https://github.com/OpenZeppelin/cairo-contracts/pull/525
    • .adoc files now taken into account by update_version.py script by @ericnordelo in https://github.com/OpenZeppelin/cairo-contracts/pull/535

    Full Changelog: https://github.com/OpenZeppelin/cairo-contracts/compare/v0.5.1...v0.6.0

    Source code(tar.gz)
    Source code(zip)
  • v0.5.1(Nov 28, 2022)

    What's Changed

    • Integrate test coverage with nile-coverage by @ericnordelo in https://github.com/OpenZeppelin/cairo-contracts/pull/494
    • Fix test implementation in ERC721BaseSuite.py by @Pilouche in https://github.com/OpenZeppelin/cairo-contracts/pull/512
    • Support Cairo 0.10.1 by @martriay in https://github.com/OpenZeppelin/cairo-contracts/pull/503
    • Remove version bump automation by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/520

    New Contributors

    • @Pilouche made their first contribution in https://github.com/OpenZeppelin/cairo-contracts/pull/512

    Full Changelog: https://github.com/OpenZeppelin/cairo-contracts/compare/v0.5.0...v0.5.1

    Source code(tar.gz)
    Source code(zip)
  • v0.5.0(Oct 25, 2022)

    What's Changed

    • Fix: typos by @omahs in https://github.com/OpenZeppelin/cairo-contracts/pull/492
    • Fix CONTRIBUTING coding style by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/485
    • Import utils funcs from Nile/remove funcs from utils.py by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/450
    • Rename ReentrancyGuard methods by @martriay in https://github.com/OpenZeppelin/cairo-contracts/pull/482
    • Add deployer preset by @martriay in https://github.com/OpenZeppelin/cairo-contracts/pull/467
    • Removed syscall_ptr and pedersen_ptr from SafeUint256 functions by @msaug in https://github.com/OpenZeppelin/cairo-contracts/pull/496
    • Allow simulating calls in Account by @ericnordelo in https://github.com/OpenZeppelin/cairo-contracts/pull/486

    New Contributors

    • @omahs made their first contribution in https://github.com/OpenZeppelin/cairo-contracts/pull/492
    • @msaug made their first contribution in https://github.com/OpenZeppelin/cairo-contracts/pull/496

    Full Changelog: https://github.com/OpenZeppelin/cairo-contracts/compare/v0.4.0...v0.5.0

    Source code(tar.gz)
    Source code(zip)
  • v0.4.0(Oct 3, 2022)

    What's Changed

    • Update RELEASING.md by @martriay in https://github.com/OpenZeppelin/cairo-contracts/pull/438
    • Fix linter lack of package.json by @martriay in https://github.com/OpenZeppelin/cairo-contracts/pull/448
    • Run docs locally and add Deploy Previews through Netlify by @ericnordelo in https://github.com/OpenZeppelin/cairo-contracts/pull/459
    • Bump to cairo v0.10 by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/449
    • Fix Wizard position in docs by @ericnordelo in https://github.com/OpenZeppelin/cairo-contracts/pull/463
    • Add integration steps to CONTRIBUTING.md by @ericnordelo in https://github.com/OpenZeppelin/cairo-contracts/pull/476
    • Fix class_hash redefinition error from IAccount.__validate_declare__ by @unparalleled-js in https://github.com/OpenZeppelin/cairo-contracts/pull/466
    • Document new preset style/add ERC20Burnable to preset list by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/477
    • Refactor tests for better coverage by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/473
    • Proxy initialization atomicity by @ericnordelo in https://github.com/OpenZeppelin/cairo-contracts/pull/443
    • Update documentation to Cairo v0.10 by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/472

    New Contributors

    • @ericnordelo made their first contribution in https://github.com/OpenZeppelin/cairo-contracts/pull/459
    • @unparalleled-js made their first contribution in https://github.com/OpenZeppelin/cairo-contracts/pull/466

    Full Changelog: https://github.com/OpenZeppelin/cairo-contracts/compare/v0.3.2...v0.4.0

    Source code(tar.gz)
    Source code(zip)
  • v0.4.0b(Sep 11, 2022)

    Beta release with support for Cairo 0.10

    What's Changed

    • Update RELEASING.md by @martriay in https://github.com/OpenZeppelin/cairo-contracts/pull/438
    • Fix linter lack of package.json by @martriay in https://github.com/OpenZeppelin/cairo-contracts/pull/448
    • Run docs locally and add Deploy Previews through Netlify by @ericnordelo in https://github.com/OpenZeppelin/cairo-contracts/pull/459
    • Bump to cairo v0.10 by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/449

    New Contributors

    • @ericnordelo made their first contribution in https://github.com/OpenZeppelin/cairo-contracts/pull/459

    Full Changelog: https://github.com/OpenZeppelin/cairo-contracts/compare/v0.3.2...v0.4.0b

    Source code(tar.gz)
    Source code(zip)
  • v0.3.2(Aug 29, 2022)

    What's Changed

    • Create IAccessControl.cairo by @zoey-t in https://github.com/OpenZeppelin/cairo-contracts/pull/408
    • Ownable: split assertion checks in two statements by @achab in https://github.com/OpenZeppelin/cairo-contracts/pull/422
    • Fix docs for proxy view calls by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/423
    • Add ERC20Burnable preset by @koloz193 in https://github.com/OpenZeppelin/cairo-contracts/pull/252

    New Contributors

    • @zoey-t made their first contribution in https://github.com/OpenZeppelin/cairo-contracts/pull/408
    • @achab made their first contribution in https://github.com/OpenZeppelin/cairo-contracts/pull/422

    Full Changelog: https://github.com/OpenZeppelin/cairo-contracts/compare/v0.3.1...v0.3.2

    Source code(tar.gz)
    Source code(zip)
  • v0.3.1(Aug 11, 2022)

    This patch release mainly removes the unneeded dependency on nile(https://github.com/OpenZeppelin/cairo-contracts/pull/419) thus preventing warning message when there's a version mismatch.

    What's Changed

    • Update documentation links to 0.3.0 by @pscott in https://github.com/OpenZeppelin/cairo-contracts/pull/416
    • Update pinned tox deps, remove nile from setup.cfg by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/419
    • Fix docs example by @martriay in https://github.com/OpenZeppelin/cairo-contracts/pull/428
    • Fix account preset link in extensibility.adoc by @ivpavici in https://github.com/OpenZeppelin/cairo-contracts/pull/431
    • Automate docsite links bump by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/420

    New Contributors

    • @ivpavici made their first contribution in https://github.com/OpenZeppelin/cairo-contracts/pull/431

    Full Changelog: https://github.com/OpenZeppelin/cairo-contracts/compare/v0.3.0...v0.3.1

    Source code(tar.gz)
    Source code(zip)
  • v0.3.0(Aug 4, 2022)

    Highlights

    What's Changed

    • fix: remove unused imports by @ca11ab1e in https://github.com/OpenZeppelin/cairo-contracts/pull/400
    • Add AccessControl docs by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/368
    • style: update SPDX license identifiers by @ca11ab1e in https://github.com/OpenZeppelin/cairo-contracts/pull/399
    • Update ownable check to validate zero address by @JulissaDantes in https://github.com/OpenZeppelin/cairo-contracts/pull/398
    • Refactor directory structure by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/350
    • Bump Nile version to 0.7.1 by @EvolveArt in https://github.com/OpenZeppelin/cairo-contracts/pull/381
    • Fix setup.cfg version by @martriay in https://github.com/OpenZeppelin/cairo-contracts/pull/406
    • Integrate docsite by @martriay in https://github.com/OpenZeppelin/cairo-contracts/pull/396
    • Deploy account util by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/339
    • Update docsite links to match new docsite by @martriay in https://github.com/OpenZeppelin/cairo-contracts/pull/410
    • Fix docs example by @martriay in https://github.com/OpenZeppelin/cairo-contracts/pull/413
    • Add script to update version by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/405

    New Contributors

    • @ca11ab1e made their first contribution in https://github.com/OpenZeppelin/cairo-contracts/pull/400
    • @EvolveArt made their first contribution in https://github.com/OpenZeppelin/cairo-contracts/pull/381

    Full Changelog: https://github.com/OpenZeppelin/cairo-contracts/compare/v0.2.1...v0.3.0

    Source code(tar.gz)
    Source code(zip)
  • v0.2.1(Jul 13, 2022)

    This release mainly fixes https://github.com/OpenZeppelin/cairo-contracts/issues/386, which rendered account contracts unusable on live networks.

    What's Changed

    • Fix typo in tests/signers.py by @0xSachinK in https://github.com/OpenZeppelin/cairo-contracts/pull/380
    • Update Proxies.md by @Wave-95 in https://github.com/OpenZeppelin/cairo-contracts/pull/388
    • Fix account signature by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/387
    • Remove old security advisory from README by @martriay in https://github.com/OpenZeppelin/cairo-contracts/pull/391
    • Fix proxy assertion by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/394
    • Simplify paths for fetching contract classes in tests by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/377
    • Update extensibility pattern by @martriay in https://github.com/OpenZeppelin/cairo-contracts/pull/397

    New Contributors

    • @0xSachinK made their first contribution in https://github.com/OpenZeppelin/cairo-contracts/pull/380
    • @Wave-95 made their first contribution in https://github.com/OpenZeppelin/cairo-contracts/pull/388

    Full Changelog: https://github.com/OpenZeppelin/cairo-contracts/compare/v0.2.0...v0.2.1

    Source code(tar.gz)
    Source code(zip)
  • v0.2.0(Jul 1, 2022)

    What's Changed

    Key points:

    • Improved Extensibility pattern, based on namespaces
    • New accounts (improved library + new EthAccount preset)
    • AccessControl and ReentrancyGuard libraries
    • Support for Cairo 0.9.0

    Full changelog:

    • dev: removing duplicate function by @milancermak in https://github.com/OpenZeppelin/cairo-contracts/pull/234
    • Set interface ids as constants by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/216
    • use tx_info.transaction_hash instead of hash_multicall in Account by @juniset in https://github.com/OpenZeppelin/cairo-contracts/pull/233
    • Fix pytest warnings, move event_loop to conftest.py by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/231
    • Update documentation by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/214
    • Fix decorator by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/243
    • Add contributing file by @JulissaDantes in https://github.com/OpenZeppelin/cairo-contracts/pull/230
    • Integrate safemath into token contracts by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/222
    • Add memoization to erc20 by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/217
    • Rename cairo contracts -> oz contracts for cairo by @martriay in https://github.com/OpenZeppelin/cairo-contracts/pull/248
    • Update readme by @martriay in https://github.com/OpenZeppelin/cairo-contracts/pull/245
    • Add parallel testing by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/235
    • Update contributing by @JulissaDantes in https://github.com/OpenZeppelin/cairo-contracts/pull/251
    • Implement a reentrancy guard by @JulissaDantes in https://github.com/OpenZeppelin/cairo-contracts/pull/236
    • Remove decorator, unused function, and import by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/253
    • dev: support for cairo-lang 0.8.1 in tests by @milancermak in https://github.com/OpenZeppelin/cairo-contracts/pull/260
    • remove src from import paths by @martriay in https://github.com/OpenZeppelin/cairo-contracts/pull/264
    • Update README.md by @JulissaDantes in https://github.com/OpenZeppelin/cairo-contracts/pull/255
    • Update links in docs by @ericglau in https://github.com/OpenZeppelin/cairo-contracts/pull/270
    • replace constants' TRUE and FALSE in favor of native ones by @martriay in https://github.com/OpenZeppelin/cairo-contracts/pull/265
    • fix: change initialized visibility to @view by @0xSidius in https://github.com/OpenZeppelin/cairo-contracts/pull/276
    • Prefer cairo syntax highlighting in Markdown files by @rootulp in https://github.com/OpenZeppelin/cairo-contracts/pull/278
    • More cairo syntax highlighting by @rootulp in https://github.com/OpenZeppelin/cairo-contracts/pull/280
    • Pin marshmallow and cairo-lang, gitignore node.json by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/286
    • Fix IAccount import by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/292
    • Reformat docs and fix ERC721 import example by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/284
    • Refactor erc20 around the _spendAllowance function by @Amxx in https://github.com/OpenZeppelin/cairo-contracts/pull/240
    • Add Solidity/Cairo upgrades comparison by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/272
    • Add namespace to ERC165 by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/298
    • Add namespace to Upgrades by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/300
    • dockerized testing by @koloz193 in https://github.com/OpenZeppelin/cairo-contracts/pull/299
    • Use Nile's Signer by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/283
    • Separate Initializable into lib/contract, integrate namespace by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/301
    • Update Account to namespace, fix docs by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/297
    • Integrate namespace into ReentrancyGuard by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/305
    • Integrate namespace and events to Pausable by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/310
    • Update extensibility pattern by @martriay in https://github.com/OpenZeppelin/cairo-contracts/pull/303
    • added pull request template by @koloz193 in https://github.com/OpenZeppelin/cairo-contracts/pull/316
    • Update cairo-lang in tox by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/325
    • Add parallel testing section to readme by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/320
    • Fix is_valid_signature decorator by @martriay in https://github.com/OpenZeppelin/cairo-contracts/pull/330
    • Move ERC165 (Introspection) docs to its own page by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/322
    • Add missing section to extensibility docs by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/332
    • Rename library constructors to initializers by @martriay in https://github.com/OpenZeppelin/cairo-contracts/pull/319
    • Integrate namespace in SafeMath by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/311
    • Refactor Ownable by @Amxx in https://github.com/OpenZeppelin/cairo-contracts/pull/244
    • Fix erc165 link by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/343
    • Fix Account reentrant signature reutilization bug by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/347
    • Add security advisory about Account vulnerability in README by @spalladino in https://github.com/OpenZeppelin/cairo-contracts/pull/349
    • Add return value to is_valid_signature by @pscott in https://github.com/OpenZeppelin/cairo-contracts/pull/338
    • Add error message for invalid nonce error by @jonasalexander in https://github.com/OpenZeppelin/cairo-contracts/pull/355
    • remove unnecessary alloc_locals in erc20 library by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/358
    • Optimize _remove_token_from_all_tokens_enumeration by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/326
    • Add SECURITY.md by @nikitastupin in https://github.com/OpenZeppelin/cairo-contracts/pull/353
    • Add markdown linter to CI by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/342
    • Fix erc721 transferFrom comment by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/341
    • Use of namespaces for ERC721 & ERC721Enumerable by @Amxx in https://github.com/OpenZeppelin/cairo-contracts/pull/296
    • Fix TestSigner pytest warning by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/367
    • Add RELEASING.md by @martriay in https://github.com/OpenZeppelin/cairo-contracts/pull/363
    • Add access docs for Ownable by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/352
    • Update to cairo v0.9.0 by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/364
    • Eth account support by @JulissaDantes in https://github.com/OpenZeppelin/cairo-contracts/pull/361
    • Fix misleading instructions in README by @andrew-fleming in https://github.com/OpenZeppelin/cairo-contracts/pull/371
    • Remove duplicate entry in .github/ISSUE_TEMPLATE/feature_request.md by @nikitastupin in https://github.com/OpenZeppelin/cairo-contracts/pull/375
    • Implement AccessControl by @martriay in https://github.com/OpenZeppelin/cairo-contracts/pull/373
    • Bump SPDX Licence ids to 0.2.0 by @martriay in https://github.com/OpenZeppelin/cairo-contracts/pull/376

    New Contributors

    • @milancermak made their first contribution in https://github.com/OpenZeppelin/cairo-contracts/pull/234
    • @JulissaDantes made their first contribution in https://github.com/OpenZeppelin/cairo-contracts/pull/230
    • @ericglau made their first contribution in https://github.com/OpenZeppelin/cairo-contracts/pull/270
    • @0xSidius made their first contribution in https://github.com/OpenZeppelin/cairo-contracts/pull/276
    • @rootulp made their first contribution in https://github.com/OpenZeppelin/cairo-contracts/pull/278
    • @koloz193 made their first contribution in https://github.com/OpenZeppelin/cairo-contracts/pull/299
    • @spalladino made their first contribution in https://github.com/OpenZeppelin/cairo-contracts/pull/349
    • @pscott made their first contribution in https://github.com/OpenZeppelin/cairo-contracts/pull/338
    • @jonasalexander made their first contribution in https://github.com/OpenZeppelin/cairo-contracts/pull/355
    • @nikitastupin made their first contribution in https://github.com/OpenZeppelin/cairo-contracts/pull/353

    Full Changelog: https://github.com/OpenZeppelin/cairo-contracts/compare/0.1.0...v0.2.0

    Source code(tar.gz)
    Source code(zip)
Owner
OpenZeppelin
The standard for secure blockchain applications
OpenZeppelin
Python Client for Instagram API

This project is not actively maintained. Proceed at your own risk! python-instagram A Python 2/3 client for the Instagram REST and Search APIs Install

Facebook Archive 2.9k Jan 01, 2023
OpenEmu Discord Rich Presence provided with Python!

A simple application that provides your current OpenEmu game as an RPC state in Discord via PyPresence. How to use Unzip and open the latest x86_64 ve

Deltaion Lee 6 May 30, 2022
Dns-Client-Server - Dns Client Server For Python

Dns-client-server DNS Server: supporting all types of queries and replies. Shoul

Nishant Badgujar 1 Feb 15, 2022
Automate HoYoLAB Genshin Daily Check-In Using Github Actions

Genshin Daily Check-In 🤖 Automate HoYoLAB Daily Check-In Using Github Actions KOR, ENG Instructions Fork the repository Go to Settings - Secrets Cli

Leo Kim 41 Jun 24, 2022
Improved file host. Change of interface and storage: 15 GB available.

File hosting v2 Improved file host. Change of interface and storage: 15 GB available. This app now uses the Google API to store, view, and delete file

Sarusman 1 Jan 18, 2022
Aria/qBittorrent Telegram mirror/leech bot.

Missneha Mirror Leech Bot Aria/qBittorrent Telegram mirror/leech bot. missneha Mirror Leech Bot is a multipurpose Telegram Bot written in Python for m

ACHAL 6 Sep 30, 2022
Signs API calls to SberCloud.Advanced with AK/SK

sbercloud-api-aksk Signs API calls to SberCloud.Advanced with AK/SK This script is a courtesy of @sadpdtchr Description Sometimes there is a need to m

Peter Predtechensky 1 Nov 30, 2021
PRAW, an acronym for "Python Reddit API Wrapper", is a python package that allows for simple access to Reddit's API.

PRAW: The Python Reddit API Wrapper PRAW, an acronym for "Python Reddit API Wrapper", is a Python package that allows for simple access to Reddit's AP

Python Reddit API Wrapper Development 3k Dec 29, 2022
Archive tweets and make them searchable

Tweeter Archive and search your tweets and liked tweets using AWS Lambda, DynamoDB and Elasticsearch. Note: this project is primarily being used a tes

Kamil Sindi 8 Nov 18, 2022
A Telegram Music Bot written in Python using Pyrogram and Py-Tgcalls

A Telegram Music Bot written in Python using Pyrogram and Py-Tgcalls. This is Also The Source Code of The UserBot Which is Playing Music in @S1-BOTS Support Group ❤️

SAF ONE 224 Dec 28, 2022
A telegram bot to read RSS feeds

Telegram bot to fetch RSS feeds This is a telegram bot that fetches RSS feeds in regular intervals and send it to you. The feed sources can be added o

Santhosh Thottingal 14 Dec 15, 2022
Holly ♥️ is usefull group management bot in telegram 🎋

Holly ♥️ is usefull group management bot in telegram 🎋

Kasun bandara 1 Dec 03, 2021
Telegram File to Link Fastest Bot , also used for movies streaming

Telegram File Stream Bot ! A Telegram bot to stream files to web. Report a Bug | Request Feature About This Bot This bot will give you stream links fo

Avishkar Patil 194 Jan 07, 2023
A discord tool to use bugs and exploits

DiscordTool A discord tool to use bugs and exploits Features: send a buggy messa

6 Aug 19, 2022
Use Node JS Keywords In Python!!!

Use Node JS Keywords In Python!!!

Sancho Godinho 1 Oct 23, 2021
MAASTA is a wrapper to create an Ansible inventory for MAAS instances that are provisioned by Terraform.

MAASTA is a wrapper to create an Ansible inventory for MAAS instances that are provisioned by Terraform.

Saeid Bostandoust 144 Dec 16, 2022
A VCVideoPlayer Bot for Telegram made with 💞 By @TeamDeeCoDe

VC Video Player How To Host ✨ Heroku Deploy ✨ The easiest way to deploy this Bot is via Heroku. Credit 🔥 |🇮🇳 Louis |🇮🇳 Sammy |🇮🇳 Blaze |🇮🇳 S

TeamDeeCode 6 Feb 28, 2022
A simple notebook to stream torrent files directly to Google Drive using Google Colab.

Colab-Torrent-to-Drive Originally by FKLC, this is a simple notebook to stream torrent files directly to Google Drive using Google Colab. You can eith

1 Jan 11, 2022
📖 GitHub action schedular (cron) that posts a Hadith every hour on Twitter & Facebook.

Hadith Every Hour 📖 A bot that posts a Hadith every hour on Twitter & Facebook (Every 3 hours for now to avoid spamming) Follow on Twitter @HadithEve

Ananto 13 Dec 14, 2022
A Twitter bot written in Python using Tweepy and hosted on a server.

A Twitter bot written in Python using Tweepy. It can like and/or retweet tweets that contain single or multiple keywords and hashtags.

anniedotexe 11 Dec 15, 2022