...762行,这里就不全部展示,我们来看最后的返回返回值是如何确定的:if?(pvStackRet) ????????*pvStackRet?=?stack; ????return?(stack.empty()???false?:?CastToBool(stack.back()));根据return语句中的三目运算符,如果栈为空则返回false,若栈不为空则进入第21行CastToBool函数:bool?CastToBool(const?valtype&?vch) { ????return?(CBigNum(vch)?!=?bnZero); ...
知识:比特币,公钥,函数,比特币存在
...roof (EVM 执行证明)。在一条交易执行过程中,State 包括 Storage,Memory 以及 Stack 的状态。Bus-mapping 是设计的基础思想。一般的 PC 体系结构中,CPU 通过总线访问存储(内存 / 硬盘),也就是计算和存储分开。zkEVM 采用的同样的架构思想,状态的变化和指令的执行分开,并且分别由 State proof 和 EVM proof 进...
知识:以太坊,技术,zk-SNARK,Layer 2,EVM,ZK
...的内存空间,应该需要一些手段来优化这些指令数量,比如用 Register 替换 Stack 操作等,但是这又会增加对编译器的修改。还有一种实现方法,就是利用 Merkel Tree 来证明。如下图所示:图二需要用一个 ZK-Friendly的hash去实现这个过程,以尽量减少这部分电路的规模。(也可以用基于Class group的Accumulator来...
知识:合约,电路,链上,合约地址
...(Script)处理。这里引用bitcoin-core源码interpreter.cpp里的一段注释:/**?*?Script?is?a?stack?machine?(like?Forth)?that?evaluates?a?predicate?*?returning?a?bool?indicating?valid?or?not.??There?are?no?loops.?*/Script是一种类Forth、基于栈式模型、无状态的、非图灵完备的语言。opcodes分为常量、流程控制、栈操作、算术运算、位运算、密码学运算...
知识:合约,以太坊,区块,区块链
...对应,就返回TRUE 58. op-dup: Operation which duplicates the entry below it on the stack op-dup: 复制堆栈下一层数据的操作 59. op-equal: Operation which returns true if the two entries below it on the stack are equivalent op-equal: 如果堆栈下一层的两个数据相等,就返回TRUE的操作 60. op-equalverify: Operation whic...
知识:比特币开发
...返回值类型是i64,下面是call指令的示意图:bytecode: ...][ call ][ func_idx ][... stack: | | | | | | | | | d(f64) |? | | | c(f32) |? ?| r(i64) | # funcs[func_idx](c,d) | b | | b | | a | | a | └───────────┘ ...
知识:指令,WASM
...AVM状态表示。AVM相关实现的代码在arbitrum/packages/arb-avm-cpp中。AVM的状态由PC,Stack,Register等状态组成。AVM的状态是这些状态的hash值拼接后的hash结果。AVM使用c++实现,AVM表示的逻辑实现在MachineStateKeys类的machineHash函数(machinestate.cpp)中。AVM的特别之处就是除了执行外,还能较方便的表达(证明)执行状...
知识:状态,挑战者,实现了,分歧
...态表示。AVM 相关实现的代码在 arbitrum/packages/arb-avm-cpp 中。AVM 的状态由 PC,Stack,Register 等状态组成。AVM 的状态是这些状态的 hash 值拼接后的 hash 结果。AVM 使用 c++实现,AVM 表示的逻辑实现在 MachineStateKeys 类的 machineHash 函数(machinestate.cpp)中。AVM 的特别之处就是除了执行外,还能较方便的表达(证明...
知识:以太坊,技术,扩容,开发者,Layer 2,EVM,Laye
...些数据可以存储于不同的位置,即位于不同的数据位置。首先是「堆栈」(stack),其中包含计算中使用的值。只能轻松访问堆栈中的前 16 个项目,因此不适合长期存储。下面显示了使用堆栈进行计算。图:基于堆栈的计算其次,为了补充堆栈,「contract memory」可用于在当前合约执行过程中存储、检索...
知识:智能合约,合约,比特币现金,以太坊
...些数据可以存储于不同的位置,即位于不同的数据位置。首先是「堆栈」(stack),其中包含计算中使用的值。只能轻松访问堆栈中的前 16 个项目,因此不适合长期存储。下面显示了使用堆栈进行计算。图:基于堆栈的计算其次,为了补充堆栈,「contract memory」可用于在当前合约执行过程中存储、检索...
知识:比特币,以太坊,比特币现金
...些数据可以存储于不同的位置,即位于不同的数据位置。首先是“堆栈”(stack),其中包含计算中使用的值。只能轻松访问堆栈中的前16个项目,因此不适合长期存储。下面显示了使用堆栈进行计算。图:基于堆栈的计算其次,为了补充堆栈,“contract memory”可用于在当前合约执行过程中存储、检索和...
知识:智能合约,合约,以太坊,比特币现金
...些数据可以存储于不同的位置,即位于不同的数据位置。首先是「堆栈」(stack),其中包含计算中使用的值。只能轻松访问堆栈中的前 16 个项目,因此不适合长期存储。下面显示了使用堆栈进行计算。图:基于堆栈的计算其次,为了补充堆栈,「contract memory」可用于在当前合约执行过程中存储、检索...
知识:Solidity,智能合约,以太坊,交易,比特币现金
...些数据可以存储于不同的位置,即位于不同的数据位置。首先是“堆栈”(stack),其中包含计算中使用的值。只能轻松访问堆栈中的前16个项目,因此不适合长期存储。下面显示了使用堆栈进行计算。图:基于堆栈的计算其次,为了补充堆栈,“contract memory”可用于在当前合约执行过程中存储、检索和...
知识:智能合约,合约,以太坊,比特币现金
...些数据可以存储于不同的位置,即位于不同的数据位置。首先是“堆栈”(stack),其中包含计算中使用的值。只能轻松访问堆栈中的前16个项目,因此不适合长期存储。下面显示了使用堆栈进行计算。图:基于堆栈的计算其次,为了补充堆栈,“contract memory”可用于在当前合约执行过程中存储、检索和...
知识:智能合约,合约,以太坊,比特币现金
...些数据可以存储于不同的位置,即位于不同的数据位置。首先是「堆栈」(stack),其中包含计算中使用的值。只能轻松访问堆栈中的前 16 个项目,因此不适合长期存储。下面显示了使用堆栈进行计算。图:基于堆栈的计算其次,为了补充堆栈,「contract memory」可用于在当前合约执行过程中存储、检索...
知识:智能合约,以太坊,比特币,比特现金