问题标签 [evm]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
erlang - 无法让透析器与 evm 一起使用
我已经erlang 17.5
安装在 /usr/local/lib 中。 evm
认为我的“系统”安装。安装 evm 后,我下载erlang 19.2
了 ,我可以使用以下命令在两个版本的 erlang 之间来回切换:
我能够使用 erlang 17.5 设置透析器,但是当我切换到 erlang 19.2 并尝试设置透析器时,会发生以下情况:
ethereum - 操作码 JUMP 在 EVM 堆栈中如何工作?
我正在关注这里的“高级 Solidity”教程。
在这个例子中,为什么 JUMP 会影响堆栈的状态?我预计它只会影响程序计数器。
(即我希望在 JUMP 之后,在 PC:11 处,堆栈的长度将是 3,而不是 2。JUMP 出现在 PUSH 0x0B 之后。)
谢谢。
ethereum - 以太坊智能合约汇编器
出于学习目的,我想直接在 Assembler 中编写以太坊智能合约。我的意思是我想在某处写黄纸上的操作码,然后将其转换为字节码。
然而,似乎没有用于 EVM 的纯汇编程序,只有各种语言的内联汇编或 LLL,它接近于汇编程序。
这样做是编写我自己的汇编程序的唯一方法吗?这似乎真的很令人惊讶,因为有很多在线反汇编程序。
c++ - Solidity 在将其编译为 EVM 字节码的过程中是否会被简化为 LLL?
查看 Solidity 编译器 Github 存储库,我看到该项目还集成了 LLL 编译器。
这让我想知道 Solidity 在编译为 EVM 字节码的过程中是否会被简化为 LLL?
我读过 LLL 作为 EVM ASM 的包装器,所以直观地将 Solidity 编译为 LLL 是否有意义?
或者 LLL 编译器是否只是作为 Solidity 项目的一部分包含在内,因为它本身太小而不能作为一个项目?
javascript - Ethereumjs-vm,run-transaction-complete 示例不打印存储
运行标题中提到的示例,“---Storage---”行之后没有输出。根据我的理解,创建的地址应该有一个null_radix。(跑步不例外)如果我错了请纠正我!
bytecode - 以太坊字节码 JUMP 和 JUMPDEST 是如何解决的?
我一直在寻找有关以太坊如何处理跳转和跳转目的地的信息。从各种博客和黄皮书我发现如下:
所采用的操作数JUMP
和所采用的两个操作数中的第一个是设置为JUMPI
的值PC
(假设第一个堆栈值!= 0 在的情况下JUMPI
)。
但是,查看此合约的创建代码(作为操作码),前几个操作码/值是:
PUSH1 0x60
PUSH1 0x40
MSTORE
CALLDATASIZE
ISZERO
PUSH2 0x00f8
JUMPI
据我了解,这意味着如果将值推入堆栈ISZERO
!= 0 然后PC
将更改为0x00f8
asJUMPI
从堆栈中获取两个,检查第二个是否为 0,如果不是,则设置PC
为其第一个操作数的值。
我遇到的问题是0x00f8
十进制是248
. 合同中的第 248 位似乎是MSTORE
而不是 a JUMPDEST
,这将导致合同无法执行,因为JUMP*
只能指向有效的JUMPDEST
.
大概合同不会故意跳转到无效的目的地?
如果有人能解释如何解决跳转和跳转目的地,我将不胜感激。
rpc - 去以太坊 | 如何连接到在本地运行的公共 Ropsten(testnet)
基本上我想连接到公共的 Ropsten 测试网。我在本地运行 geth 有几个选项。(--testnet, --rpc, --rpcapi, console)
.
我想我可以获取我的(ropsten)帐户并检查我在 ropsten 测试网上有多少“以太”或“erc20 代币”。但是,它无法识别我帐户中的以太币。
例如,我使用“以太坊钱包”成功地将一些“以太”和“自定义 erc20 代币”发送到我的账户。当我连接到“Ropsten 测试网络”以单击元掩码窗口顶部的下拉栏时,我可以在元掩码上看到正确的数量。但是,如果我将其更改为下拉栏的第 4 个“Localhost 8545”并连接到“localhost:8545”,则以太币和令牌更改为 0 数量。
数量不一样,这很奇怪。总之,我认为在我本地运行的 geth 没有连接到公共 ropsten testnet 网络。因为这意味着我有不同的私钥和相同的公共地址。我认为,ropsten 测试网上的相同公共地址必须具有相同的私钥。
有没有人有这样的经验,或者我可以知道如何(geth)命令连接到公共测试网网络。
哦,我还有另一个问题!
我在本地运行 go-ethereum,如下所示。
但我无法再连接到元掩码上的 localhost:8545 了。
我找不到 8545 开放的端口。为什么有时rpc端口不开放?
ethereum - Solidity:为什么这个简单的存储合约不起作用?
我正在通过创建一个简单的存储合约来练习,但我无法从数组“数字”中存储或检索值。uint "structID" 不会增加,函数 "testRetrieve" 只为正确的索引返回 0。
“StructID”没有递增的事实让我相信问题出在“store”函数上。但是,在 SO 和在线教程/文档中阅读了多个问题后,我仍然感到困惑。
有谁知道为什么这个合约不会存储数据?
编辑:对于上述功能,我从私有区块链上的 geth 控制台调用所有功能。对于“testRetrieve”,我正在使用为“entryID”和“test”提供的“0”来测试函数,以指定数组中的第一个条目。
函数“store”在调用时发送交易。
编辑:
问题是气体。尽管我的私网 gas 价格很低,但在我的网络默认值 90000 的基础上,给交易 200000 gas(存储功能成本约为 104000)使其成功。
ethereum - Solidity 程序集、mstore 函数和字的宽度(以字节为单位)
我正在学习 Solidity Assembly,但我对某些事情感到困惑。我正在查看这个名为 Seriality 的库。具体来说,这个函数:https ://github.com/pouladzade/Seriality/blob/master/src/TypesToBytes.sol#L21
该函数 bytes32ToBytes 采用 bytes32 变量并将其存储在动态大小的字节数组中,从传入的偏移量开始。
让我困惑的是它两次使用了 mstore 函数。但是 mstore 函数存储一个字,也就是 32 个字节,对吧?那么,既然输入是 32 字节,为什么它会被调用两次呢?不会两次调用它来存储 2 个字,即 64 字节吗?
谢谢!