问题标签 [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.

0 投票
1 回答
3679 浏览

types - 映射类型的 Solidity 大小

在 Solidity 中,映射可以存储的键或键值对是否存在最大数量?如果有,最大值是多少?此外,最大数量是否根据键的变量类型和映射的值而有所不同?

例如,以下映射可以存储多少个地址-uint 对?

0 投票
0 回答
75 浏览

ethereum - 顶峰以太坊

根据capstone 存储库,添加了对以太坊虚拟机 (EVM) 字节码的支持。但是,我不知道如何将 capstone 用于 EVM,既不使用 Java 也使用 python 绑定(我只尝试了这两种语言)。各自的文档javapython没有引用 EVM 的字节码。

任何帮助表示赞赏

0 投票
2 回答
42 浏览

ethereum - 当发送者在函数执行过程中耗尽气体时会发生什么?

假设我们有一个具有以下定义函数的合约:

并假设发件人在以下行之后用完了gas:

状态变量发生了什么?区块中是否包含不完整的交易?

0 投票
1 回答
491 浏览

blockchain - Solidity 0.5.0 变量太多

我尝试使用 Truffle 框架编译智能合约,得到以下输出:

使用 Solidity 0.5.0 编写的智能合约源代码为:

我想知道是否有办法理解和识别变量数量超过的部分。我应该把所有东西都变成映射吗?编译器没有向我提供更多信息。

另外,我发现了这个问题,它很相似,但我不确定这是同一个问题,一个缺点是memory当你做一个 get 时将变量保存在内存(关键字)中,另一个是设置它们。使用映射是解决这个问题的唯一可能的选择吗?另外,智能合约还没有结束,后面会添加很多其他的部分。

0 投票
0 回答
913 浏览

node.js - 使用 INFURA 调用智能合约函数

我不明白如何准备交易、签署交易然后使用 INFURA 发送。我希望我发布的 NodeJS 代码有问题。谁能帮我解决这个问题?

注意:我可以在我的智能合约上发送交易,但 EVM 会恢复执行。

智能合约(Solidity)的一部分(我要调用的函数):

NodeJS中使用的函数:

输出:

error occurred: Error: Transaction has been reverted by the EVM: { "blockHash": "0x6205c1b8ce2fde3693e85843dce684ff11472e9df01fd850bc99e5771b3262d5", "blockNumber": 5024524, "contractAddress": null, "cumulativeGasUsed": "0x50170f", "from": "0x8882528C7104e146E0500203C353C09922575385", “gasUsed”:“0x5236”,“logs”:[],“logsBloom”:“0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "status": "0x0", "to": "0x1732089F6F6EeFA942871707c5AE1909B60774EB", "transactionHash": "0xf748c9a6bdb19e776db4d8a9802d2bf5f8b588158da387029529249aca00a499", "事务索引": 1 })

我想特别注意let details = {...};我不太确定它是否正确的对象,对此我有点困惑。

0 投票
0 回答
26 浏览

ethereum - 以太坊虚拟机中的数据范围

我想以映射的形式在我的合同中存储一些敏感数据

使用 Solidity ^0.5

我知道智能合约中的隐私问题,编译器会自动为所有公共状态变量创建 getter 函数,但是当涉及到映射(或任何动态大小的变量)时,如果没有,人们如何访问它们(默认情况下) ,是否存在对 EVM 进行逆向工程以读取数据的风险。感谢帮助!

0 投票
1 回答
70 浏览

ethereum - 间接跳转字节码

我正在尝试了解以太坊字节码。因此,只要有任何 JUMP/JUMPI 操作码,它前面都会有一些 PUSH 操作码。

我的问题是如何区分这种跳跃是直接的还是间接的?有人可以给我一些以太坊字节码的例子,其中跳转是间接的。

0 投票
0 回答
116 浏览

blockchain - C 二进制代码(编译后)到 EVM 字节码的转换

考虑以下示例:

假设我有一个用 C 语言编写的函数 ADD,它将两个整数 int A 和 int B 相加并返回总和 C。现在,我想验证我的函数 ADD 使用以太坊区块链是否正确工作。

为此,我在以太坊区块链上部署了一个简单的智能合约,它有一个名为Verify ((A,B),C) 的函数,如果验证成立则返回 true,否则返回 false。对于此验证,我想将两个参数传递给验证函数。第一个参数应该是输入,第二个参数将是我的 ADD 函数的输出。

验证函数将在 (A,B) 上执行,生成输出 C' 并将其与 C 进行比较。如果 C'== C,则返回 true,否则返回 false。现在,对于上面的例子,我的问题如下:

  1. 如何将我的 C 程序的编译二进制代码转换为 EVM 代码?换句话说,如果我将 (A,B,0) 视为状态 1 输出,将 (A,B,C) 视为 C 程序的状态 2 输出,那么如何将每个状态转换为 EVM 字节码,以便 EVM从 state1 开始执行并在 state2 结束?
0 投票
0 回答
39 浏览

cryptography - 有没有办法扩展 Solidity 编译器来为新指令生成字节码?

如果你想扩展 Solidity 来为新指令生成代码,你会怎么做?有没有用 LLVM 之类的东西完成一些工作?

0 投票
1 回答
520 浏览

ethereum - 在solidity中动态创建一个变量

我想在我的合同中包含一个内部方法,该方法允许在由参数命名的存储中创建一个新的 uint256。就像是:

我的猜测是它需要内联汇编,但我不知道如何