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

feat: add limit to unique contract call #10640

Merged
merged 11 commits into from
Dec 23, 2024

Conversation

IlyasRidhuan
Copy link
Contributor

@IlyasRidhuan IlyasRidhuan commented Dec 11, 2024

Resolves #10369

Note from @dbanks12:
Once the limit has been reached for contract calls to unique class IDs, you can still call repeat contract addresses or even other contract addresses that reuse an already checked class ID.

I had to change the call-ptr/space-id to just use a counter instead of clk because space-id is uint8 and we were getting collisions.

Follow-up work:

  • constrain that user-called address can be derived from the hinted class ID & instance

Copy link
Contributor Author

This stack of pull requests is managed by Graphite. Learn more about stacking.

@IlyasRidhuan IlyasRidhuan force-pushed the ir/12-10-feat_add_limit_to_unique_contract_call branch from 4ab7f52 to 8ed7693 Compare December 11, 2024 21:26
@IlyasRidhuan IlyasRidhuan force-pushed the ir/12-10-feat_add_limit_to_unique_contract_call branch from 8ed7693 to 7ec3d93 Compare December 18, 2024 10:16
@IlyasRidhuan IlyasRidhuan force-pushed the ir/12-10-feat_add_limit_to_unique_contract_call branch from 7ec3d93 to 40cd8a9 Compare December 18, 2024 12:15
@dbanks12 dbanks12 self-assigned this Dec 19, 2024
@dbanks12 dbanks12 marked this pull request as ready for review December 19, 2024 20:15
Comment on lines +386 to 404
// Not sure why, but using instanceof here doesn't work and leads odd behavior,
// but using constructor.name does the job...
if (v === undefined) {
tag = TypeTag.FIELD; // uninitialized memory is Field(0)
} else if (v instanceof Field) {
} else if (v.constructor.name == 'Field') {
tag = TypeTag.FIELD;
} else if (v instanceof Uint1) {
} else if (v.constructor.name == 'Uint1') {
tag = TypeTag.UINT1;
} else if (v instanceof Uint8) {
} else if (v.constructor.name == 'Uint8') {
tag = TypeTag.UINT8;
} else if (v instanceof Uint16) {
} else if (v.constructor.name == 'Uint16') {
tag = TypeTag.UINT16;
} else if (v instanceof Uint32) {
} else if (v.constructor.name == 'Uint32') {
tag = TypeTag.UINT32;
} else if (v instanceof Uint64) {
} else if (v.constructor.name == 'Uint64') {
tag = TypeTag.UINT64;
} else if (v instanceof Uint128) {
} else if (v.constructor.name == 'Uint128') {
tag = TypeTag.UINT128;
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is silly.... I lost like 2 hours debugging an error with tag checking until eventually I resorted to this change. I was printing v right before this if/else and it was showing Uint32(0x3) for example, but would then fail instanceof Uint32 and I don't understand why. I saw it also for Field and the others. @fcarreiro

Comment on lines 188 to 200
this.log.verbose('Exceptional halt (revert by something other than REVERT opcode)');
if (!(err instanceof AvmExecutionError || err instanceof SideEffectLimitReachedError)) {
// FIXME: weird that we have to do this OutOfGasError check because:
// 1. OutOfGasError is an AvmExecutionError, so that check should cover both
// 2. We should at least be able to do instanceof OutOfGasError instead of checking the constructor name
if (
!(
err.constructor.name == 'OutOfGasError' ||
err instanceof AvmExecutionError ||
err instanceof SideEffectLimitReachedError
)
) {
this.log.error(`Unknown error thrown by AVM: ${err}`);
throw err;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same issue here as mentioned in the other comment.... Idk why OutOfGasError wasn't being caught as part of AvmExecutionError, but it wasn't.... AND it was failing instanceof OutOfGasError.... Sometimes I hate TS 🫠

@dbanks12 dbanks12 merged commit d340f0b into master Dec 23, 2024
48 of 50 checks passed
@dbanks12 dbanks12 deleted the ir/12-10-feat_add_limit_to_unique_contract_call branch December 23, 2024 16:31
PhilWindle pushed a commit that referenced this pull request Dec 23, 2024
🤖 I have created a release *beep* *boop*
---


<details><summary>aztec-package: 0.68.1</summary>

##
[0.68.1](aztec-package-v0.68.0...aztec-package-v0.68.1)
(2024-12-23)


### Miscellaneous

* Configurable parallelism in bootstrap
([#10909](#10909))
([5260f1e](5260f1e))
</details>

<details><summary>barretenberg.js: 0.68.1</summary>

##
[0.68.1](barretenberg.js-v0.68.0...barretenberg.js-v0.68.1)
(2024-12-23)


### Miscellaneous

* **barretenberg.js:** Synchronize aztec-packages versions
</details>

<details><summary>aztec-packages: 0.68.1</summary>

##
[0.68.1](aztec-packages-v0.68.0...aztec-packages-v0.68.1)
(2024-12-23)


### Features

* Add a warning when using unsafe blocks without safety comments
(noir-lang/noir#6860)
([84a4005](84a4005))
* Add limit to unique contract call
([#10640](#10640))
([d340f0b](d340f0b))
* Configurable external check failures
(noir-lang/noir#6810)
([84a4005](84a4005))
* **docs:** Add aztec-wallet proving
([#10847](#10847))
([3efae86](3efae86))
* Flatten nested if-else statements with equivalent conditions
(noir-lang/noir#6875)
([84a4005](84a4005))
* **p2p:** Timeout peers, disconnect from badly scored peers
([#10907](#10907))
([76a23eb](76a23eb))
* Replace `eval_global_as_array_length` with type/interpreter evaluation
(noir-lang/noir#6469)
([84a4005](84a4005))
* Revamped sequencer timetable and tx processing timeout
([#10870](#10870))
([145122b](145122b))
* Sync from aztec-packages (noir-lang/noir#6824)
([84a4005](84a4005))
* Warn on unnecessary unsafe blocks
(noir-lang/noir#6867)
([84a4005](84a4005))


### Bug Fixes

* Add devcoin to faucet after deployment
([#10903](#10903))
([6aa5369](6aa5369))
* CI kind test fix
([#10932](#10932))
([bda1ac7](bda1ac7))
* **ci:** Tester/builder start race conditions
([#10893](#10893))
([4250782](4250782))
* Conditionally deploy deterministic deployment proxy
([#10936](#10936))
([48624b7](48624b7))
* Degrade libp2p crypto package
([#10876](#10876))
([9293f38](9293f38))
* Detect cycles in globals (noir-lang/noir#6859)
([84a4005](84a4005))
* Don't deduplicate binary math of unsigned types
(noir-lang/noir#6848)
([84a4005](84a4005))
* Double alias in path (noir-lang/noir#6855)
([84a4005](84a4005))
* Implement `as_field` and `from_field` in the interpreter
(noir-lang/noir#6829)
([84a4005](84a4005))
* Install Yarn 4.5.2 to build WASM
([#10940](#10940))
([2a76380](2a76380))
* Removed Sepolia stuff from devnet deploy action
([#10916](#10916))
([fbf120b](fbf120b))


### Miscellaneous

* **avm:** Check that slice read/write are not out of memory range
([#10879](#10879))
([ab3f318](ab3f318)),
closes
[#7385](#7385)
* Avoid duplicate Not instructions during flattening
(noir-lang/noir#6886)
([84a4005](84a4005))
* **ci:** Add non determinism check and fixes
(noir-lang/noir#6847)
([84a4005](84a4005))
* **ci:** Display times in compilation and execution reports only with
seconds (noir-lang/noir#6880)
([84a4005](84a4005))
* **ci:** Execution time report
(noir-lang/noir#6827)
([84a4005](84a4005))
* **ci:** Take averages for compilation and execution report of small
programs (noir-lang/noir#6874)
([84a4005](84a4005))
* Clean up gates reports script
(noir-lang/noir#6896)
([84a4005](84a4005))
* Configurable parallelism in bootstrap
([#10909](#10909))
([5260f1e](5260f1e))
* **docs:** Updating noirjs tutorial for 1.0.0
(noir-lang/noir#6792)
([84a4005](84a4005))
* **docs:** Updating the solidity contract how-to guide
(noir-lang/noir#6804)
([84a4005](84a4005))
* Fix warnings (noir-lang/noir#6863)
([84a4005](84a4005))
* Have rust-analyzer use the stable toolchain
(noir-lang/noir#6825)
([84a4005](84a4005))
* Move constant creation out of loop
(noir-lang/noir#6836)
([84a4005](84a4005))
* Move empty programs to `compile_success_empty`
(noir-lang/noir#6891)
([84a4005](84a4005))
* New default resource values for GKE
([#10928](#10928))
([18e38d3](18e38d3))
* Quick docs fix for
[#6839](#6839)
(noir-lang/noir#6840)
([84a4005](84a4005))
* Refactor `DataFlowGraph.insert_instruction_and_results`
(noir-lang/noir#6823)
([84a4005](84a4005))
* Remove get registered account from pxe
([#10479](#10479))
([ee568ff](ee568ff))
* Remove malformed functions from brillig reports
(noir-lang/noir#6898)
([84a4005](84a4005))
* Remove the `as_field` and `from_field` built-ins
(noir-lang/noir#6845)
([84a4005](84a4005))
* Reorganise translator proving key construction
([#10853](#10853))
([5da4d1b](5da4d1b))
* Replace relative paths to noir-protocol-circuits
([b9f9875](b9f9875))
* Update gates diff action
([#10917](#10917))
([57439a7](57439a7))
* Use smallvec for instruction results
(noir-lang/noir#6877)
([84a4005](84a4005))
* Use Vec for callstacks (noir-lang/noir#6821)
([84a4005](84a4005))
</details>

<details><summary>barretenberg: 0.68.1</summary>

##
[0.68.1](barretenberg-v0.68.0...barretenberg-v0.68.1)
(2024-12-23)


### Features

* Add limit to unique contract call
([#10640](#10640))
([d340f0b](d340f0b))


### Miscellaneous

* **avm:** Check that slice read/write are not out of memory range
([#10879](#10879))
([ab3f318](ab3f318)),
closes
[#7385](#7385)
* Reorganise translator proving key construction
([#10853](#10853))
([5da4d1b](5da4d1b))
</details>

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).
AztecBot added a commit to AztecProtocol/barretenberg that referenced this pull request Dec 24, 2024
🤖 I have created a release *beep* *boop*
---


<details><summary>aztec-package: 0.68.1</summary>

##
[0.68.1](AztecProtocol/aztec-packages@aztec-package-v0.68.0...aztec-package-v0.68.1)
(2024-12-23)


### Miscellaneous

* Configurable parallelism in bootstrap
([#10909](AztecProtocol/aztec-packages#10909))
([5260f1e](AztecProtocol/aztec-packages@5260f1e))
</details>

<details><summary>barretenberg.js: 0.68.1</summary>

##
[0.68.1](AztecProtocol/aztec-packages@barretenberg.js-v0.68.0...barretenberg.js-v0.68.1)
(2024-12-23)


### Miscellaneous

* **barretenberg.js:** Synchronize aztec-packages versions
</details>

<details><summary>aztec-packages: 0.68.1</summary>

##
[0.68.1](AztecProtocol/aztec-packages@aztec-packages-v0.68.0...aztec-packages-v0.68.1)
(2024-12-23)


### Features

* Add a warning when using unsafe blocks without safety comments
(noir-lang/noir#6860)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* Add limit to unique contract call
([#10640](AztecProtocol/aztec-packages#10640))
([d340f0b](AztecProtocol/aztec-packages@d340f0b))
* Configurable external check failures
(noir-lang/noir#6810)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* **docs:** Add aztec-wallet proving
([#10847](AztecProtocol/aztec-packages#10847))
([3efae86](AztecProtocol/aztec-packages@3efae86))
* Flatten nested if-else statements with equivalent conditions
(noir-lang/noir#6875)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* **p2p:** Timeout peers, disconnect from badly scored peers
([#10907](AztecProtocol/aztec-packages#10907))
([76a23eb](AztecProtocol/aztec-packages@76a23eb))
* Replace `eval_global_as_array_length` with type/interpreter evaluation
(noir-lang/noir#6469)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* Revamped sequencer timetable and tx processing timeout
([#10870](AztecProtocol/aztec-packages#10870))
([145122b](AztecProtocol/aztec-packages@145122b))
* Sync from aztec-packages (noir-lang/noir#6824)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* Warn on unnecessary unsafe blocks
(noir-lang/noir#6867)
([84a4005](AztecProtocol/aztec-packages@84a4005))


### Bug Fixes

* Add devcoin to faucet after deployment
([#10903](AztecProtocol/aztec-packages#10903))
([6aa5369](AztecProtocol/aztec-packages@6aa5369))
* CI kind test fix
([#10932](AztecProtocol/aztec-packages#10932))
([bda1ac7](AztecProtocol/aztec-packages@bda1ac7))
* **ci:** Tester/builder start race conditions
([#10893](AztecProtocol/aztec-packages#10893))
([4250782](AztecProtocol/aztec-packages@4250782))
* Conditionally deploy deterministic deployment proxy
([#10936](AztecProtocol/aztec-packages#10936))
([48624b7](AztecProtocol/aztec-packages@48624b7))
* Degrade libp2p crypto package
([#10876](AztecProtocol/aztec-packages#10876))
([9293f38](AztecProtocol/aztec-packages@9293f38))
* Detect cycles in globals (noir-lang/noir#6859)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* Don't deduplicate binary math of unsigned types
(noir-lang/noir#6848)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* Double alias in path (noir-lang/noir#6855)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* Implement `as_field` and `from_field` in the interpreter
(noir-lang/noir#6829)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* Install Yarn 4.5.2 to build WASM
([#10940](AztecProtocol/aztec-packages#10940))
([2a76380](AztecProtocol/aztec-packages@2a76380))
* Removed Sepolia stuff from devnet deploy action
([#10916](AztecProtocol/aztec-packages#10916))
([fbf120b](AztecProtocol/aztec-packages@fbf120b))


### Miscellaneous

* **avm:** Check that slice read/write are not out of memory range
([#10879](AztecProtocol/aztec-packages#10879))
([ab3f318](AztecProtocol/aztec-packages@ab3f318)),
closes
[#7385](AztecProtocol/aztec-packages#7385)
* Avoid duplicate Not instructions during flattening
(noir-lang/noir#6886)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* **ci:** Add non determinism check and fixes
(noir-lang/noir#6847)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* **ci:** Display times in compilation and execution reports only with
seconds (noir-lang/noir#6880)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* **ci:** Execution time report
(noir-lang/noir#6827)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* **ci:** Take averages for compilation and execution report of small
programs (noir-lang/noir#6874)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* Clean up gates reports script
(noir-lang/noir#6896)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* Configurable parallelism in bootstrap
([#10909](AztecProtocol/aztec-packages#10909))
([5260f1e](AztecProtocol/aztec-packages@5260f1e))
* **docs:** Updating noirjs tutorial for 1.0.0
(noir-lang/noir#6792)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* **docs:** Updating the solidity contract how-to guide
(noir-lang/noir#6804)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* Fix warnings (noir-lang/noir#6863)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* Have rust-analyzer use the stable toolchain
(noir-lang/noir#6825)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* Move constant creation out of loop
(noir-lang/noir#6836)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* Move empty programs to `compile_success_empty`
(noir-lang/noir#6891)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* New default resource values for GKE
([#10928](AztecProtocol/aztec-packages#10928))
([18e38d3](AztecProtocol/aztec-packages@18e38d3))
* Quick docs fix for
[#6839](AztecProtocol/aztec-packages#6839)
(noir-lang/noir#6840)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* Refactor `DataFlowGraph.insert_instruction_and_results`
(noir-lang/noir#6823)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* Remove get registered account from pxe
([#10479](AztecProtocol/aztec-packages#10479))
([ee568ff](AztecProtocol/aztec-packages@ee568ff))
* Remove malformed functions from brillig reports
(noir-lang/noir#6898)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* Remove the `as_field` and `from_field` built-ins
(noir-lang/noir#6845)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* Reorganise translator proving key construction
([#10853](AztecProtocol/aztec-packages#10853))
([5da4d1b](AztecProtocol/aztec-packages@5da4d1b))
* Replace relative paths to noir-protocol-circuits
([b9f9875](AztecProtocol/aztec-packages@b9f9875))
* Update gates diff action
([#10917](AztecProtocol/aztec-packages#10917))
([57439a7](AztecProtocol/aztec-packages@57439a7))
* Use smallvec for instruction results
(noir-lang/noir#6877)
([84a4005](AztecProtocol/aztec-packages@84a4005))
* Use Vec for callstacks (noir-lang/noir#6821)
([84a4005](AztecProtocol/aztec-packages@84a4005))
</details>

<details><summary>barretenberg: 0.68.1</summary>

##
[0.68.1](AztecProtocol/aztec-packages@barretenberg-v0.68.0...barretenberg-v0.68.1)
(2024-12-23)


### Features

* Add limit to unique contract call
([#10640](AztecProtocol/aztec-packages#10640))
([d340f0b](AztecProtocol/aztec-packages@d340f0b))


### Miscellaneous

* **avm:** Check that slice read/write are not out of memory range
([#10879](AztecProtocol/aztec-packages#10879))
([ab3f318](AztecProtocol/aztec-packages@ab3f318)),
closes
[#7385](AztecProtocol/aztec-packages#7385)
* Reorganise translator proving key construction
([#10853](AztecProtocol/aztec-packages#10853))
([5da4d1b](AztecProtocol/aztec-packages@5da4d1b))
</details>

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Limit number of contract calls & enqueued calls to unique contracts
2 participants