问题标签 [smartcontracts]

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 投票
3 回答
33440 浏览

memory - 在 Ethereum Solidity 中,“memory”关键字的作用是什么?

在查看示例合同时,有时数组是在具有“内存”的方法中声明的,有时则不是。有什么不同?

0 投票
1 回答
150 浏览

ethereum - 在以太坊合约中指定未来交易

比特币有一个 nLockTime 参数,该参数可以与交易相关联,以指定在将交易添加到区块之前必须经过的最短时间。是否可以在以太坊合约中做类似的事情?

0 投票
1 回答
265 浏览

bitcoin - 在不删除换行符的情况下编译智能合约

我是与以太坊编写智能合约的新手。

根据官方文档,编译智能合约需要删除合约源代码中的所有换行符:

https://ethereum.gitbooks.io/frontier-guide/content/contract_greeter.html

由于我认为删除过程并不聪明,我想编译代码本身,如:

迎宾员.txt

有人该怎么做吗?

我使用的编译器是 Solidity。

0 投票
2 回答
1443 浏览

blockchain - 向 Solidity 结构添加一个新字段会使以太坊合约停止工作

在以太坊专用网络(geth)中,我确实有非常简单的合约(在 Solidity 中)。

版本 1:

我确实部署了合同,然后像这样调用它(来自web3.js):

  1. 合同.getLog()
  2. contract.setBalance(valid_address, 55)
  3. 合同.getLog()
  4. contract.getBalance(地址)
  5. contract.get42(地址)

我得到输出结果:

  1. [通话结束]:T()
  2. [通话结束]:setBalance()
  3. 55
  4. 42

现在我只需在 TData 结构中添加一个新字段:

版本 2:

我执行与上述相同的调用:

  1. 合同.getLog()
  2. contract.setBalance(valid_address, 55)
  3. 合同.getLog()
  4. contract.getBalance(地址)
  5. contract.get42(地址)

但现在我得到:

  1. [通话结束]:T()
  2. [通话结束]:T()
  3. 0
  4. 0

似乎“ setBalance() ”函数未执行(或在某处退出)并且存储中的状态未更改。

请帮忙!

谢谢。

0 投票
1 回答
925 浏览

ethereum - 以太坊事件未出现但功能完成

我有以下合同:

当我使用 web3 购买带有 的产品时Store.buyProduct,会进行产品购买,但该事件不会在前端触发。这是我的事件观察程序代码:

0 投票
4 回答
19408 浏览

blockchain - 如何在 Solidity 中返回映射列表?(以太坊合约)

我想做一个简单的智能合约,它有一个列表,可以设置项目,并且可以获取列表。

坚固的代码:

我想让 getList() 返回列表,但返回类型不兼容。我怎样才能做到这一点?

0 投票
7 回答
23744 浏览

ethereum - 如何确定以太坊地址是否为合约?

Solidity 中的地址可以是账户或合约(或其他事物,例如交易)。当我有一个变量 x,持有一个地址时,我如何测试它是否是合约?

(是的,我已经阅读了文档中关于类型的章节)

0 投票
1 回答
3096 浏览

blockchain - 智能合约如何处理多个用户和不同的存储?

我正在以太坊区块链上试验智能合约。假设我有一个合同,类似于Solidity 文档中的SimpleStorage.sol ,它具有任何人都可以访问的存储状态。如链接所述,

任何人都可以使用不同的值再次调用 set 并覆盖您的号码

这会导致问题,并且将该功能的可访问性限制为特定帐户的解决方案不适合我的用例。在我的合同中,我希望每个帐户设置的数据以后可以由不同的预定帐户访问(考虑这样一种关系,其中人 A->B 所以 B 只使用来自 A 的数据,而 x->y 使用数据完全来自 x。在 y 可以使用 A 的数据的情况下不存在重叠)。据我了解,该问题有两种解决方案:

  1. 将地址相互映射并跟踪此单个智能合约中的所有数据。
  2. 拥有一个初始账户可以访问的智能合约“模板”,并为每个新账户生成一个单独的智能合约,以简单地保存与模板交互的数据。

当账户之间的关系变得更加复杂(映射单独的结构?)或大量人试图将他们的信息存储在合约中时,就会出现1的问题。

2的问题是冗余。我真的需要为每个试图访问主模板的人制作一份单独的“合同”吗?

如果我的问题含糊不清,我可以解释更多,但我主要是在寻找一个概念性的答案。我发现的大多数智能合约示例要么非常简单,要么过于复杂,并且没有提供具体的用例。

0 投票
1 回答
81 浏览

blockchain - 外部方访问智能合约(区块链)

因此,如果 A 和 B 有一个关于某些服务的智能合约,那么外部方 C 如何获得对该合约的读/写权限?

  • 签约时是否需要将合同设置为“公开”?
  • A 或 (/and?) B 可以在签署后将合同的访问权授予 C 吗?
  • 还有其他方法吗?
0 投票
1 回答
526 浏览

ethereum - 创建“交易处理程序”智能合约

我的实习生刚接触solidity 和geth,我开始使用solidity 在线IDE 和geth 开发模式部署contrcts。我的问题是我尝试了几种不同的方法,但似乎没有任何效果。

代码:

我也尝试了这个solidity教程的合同,但它也没有像我预期的那样工作:

我只是想制作一个智能合约,可以在发送方和接收方之间进行交易,但账户余额不会移动。这些功能是否只是抽象的,以了解 Solidity 的工作原理,还是这真的可以改变平衡?感谢您的回答:)