Solidity - “未捕获的类型错误:无法读取未定义的属性‘合同’”

Posted

技术标签:

【中文标题】Solidity - “未捕获的类型错误:无法读取未定义的属性‘合同’”【英文标题】:Solidity - "Uncaught TypeError: Cannot read property 'contract' of undefined" 【发布时间】:2016-05-21 20:42:41 【问题描述】:

我对 Mix IDE 和以太坊(特别是solidity)有点陌生,我有一个幼稚的问题。我网页中的 javascript 代码如何与合同代码“绑定”?我写了一个接受值的简单网页,但 javascript 似乎无法将值传递给实际合同。确切的错误行是:

var result = contracts["MyFirstContract"].contract.reportUser("foo");

Mix 给我的确切错误是:

“未捕获的类型错误:无法读取未定义的属性‘合同’。”

所以它显然将 contracts["MyFirstContract"] 视为 nil

但是,MyFirstContract.sol 文件存在! javascript 如何知道我在说什么合同文件?它似乎没有出现在文档中,尽管我可能遗漏了一些东西。

【问题讨论】:

【参考方案1】:

我知道出了什么问题。似乎 javascript 代码不直接访问 .col 文件。它直接从区块链获取合约代码,而不是实际的 .col 文件。所以你必须在你的 javascript 看到它之前编译并上传合约到区块链。

您必须将交易添加到测试区块链。在 Mix IDE 中,您必须按下“右视图”窗格中可用的“添加事务”按钮(F7 拉出“右视图”窗格)。对话框打开后,按“创建合同”单选按钮并从下拉菜单中选择您刚刚创建的合同。按 OK,然后 Mix 创建一个包含你的合约代码的交易。然后试试你的javascript,它应该可以工作。

【讨论】:

以上是关于Solidity - “未捕获的类型错误:无法读取未定义的属性‘合同’”的主要内容,如果未能解决你的问题,请参考以下文章

未捕获的类型错误:无法读取未定义的属性 toLowerCase

JQuery:未捕获的类型错误:无法读取未定义的属性“调用”

未捕获的类型错误:无法读取文本字段上未定义错误的属性“toLowerCase”

未捕获的类型错误:无法读取未定义的属性(读取“路径名”)

未捕获的类型错误无法读取 null 的属性(读取“查询选择器”)

未捕获的类型错误:无法读取未定义的属性(读取“替换”)