首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么range_check_ptr为[0,2^128]而不是[0,P/2)?

为什么range_check_ptr为[0,2^128]而不是[0,P/2)?
EN

Stack Overflow用户
提问于 2022-07-09 14:43:10
回答 1查看 116关注 0票数 1

根据医生的说法,毡是一个场元,即在[0,P]范围内的任何整数,P= 2^251 + 17 * 2^192 + 1。

另一方面,ptr检查毛毡是否在[0,2^128]内。

我不明白这个限制:为什么不[0,2^250]这样一个毡在某种程度上就是一个int250?

MWE:

代码语言:javascript
复制
%lang starknet

from starkware.cairo.common.math import assert_nn

@view
func foo{range_check_ptr}() -> ():
    alloc_locals
    local x
    %{ ids.x = PRIME - 10 %}
    assert_nn(a=x)
    return ()
end

这是因为如何定义assert_nnrange_check_ptr而失败的,但我不明白为什么它是这样设计的:

代码语言:javascript
复制
Error at pc=0:0:
Got an exception while executing a hint.
    %{
        ^^
Cairo traceback (most recent call last):
contracts/main.cairo:6:6: (pc=0:13)
func foo{range_check_ptr}() -> ():
     ^**^
contracts/tmp.cairo:10:5: (pc=0:8)
    assert_nn(a=x)
    ^************^

Traceback (most recent call last):
  File "/Users/clementwalter/.pyenv/versions/3.9.13/envs/starksheet/lib/python3.9/site-packages/starkware/cairo/common/math.cairo", line 43, in <module>
    assert 0 <= ids.a % PRIME < range_check_builtin.bound, f\'a = {ids.a} is out of range.\'
AssertionError: a = 3618502788666131213697322783095070105623107215331596699973092056135872020471 is out of range.'})
EN

回答 1

Stack Overflow用户

发布于 2022-07-13 11:16:17

两者都是有效的选择。您可以使用2 250范围检查来模拟128范围检查,或使用3-128范围检查来模拟250范围检查。它归结为性能(更少是更好)和什么是更常见的用途。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72922293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档