我是区块链和DAPP世界的新手。我一直在玩truffle website上的玩具示例(使用web3js)并创建我自己的DAPP,它与一个演示令牌(在ropsten上),一个涌入数据库(通过GET请求)交互,以及etherscan API。
我把它放在网上并尝试了一下,它可以创造奇迹,但是如果我在我的网络浏览器中打开它,而其他人在他们的打开它,当点击按钮,例如,加载我的余额并显示它,我正确看到它,但是打开DAPP的其他人看到装载的天平。这怎么可能,我该如何解决?
我使用固定地址来读取余额,并通过etherscan检查交易并通过D3显示它们。
谢谢!
答案 0 :(得分:1)
正如评论中所提到的,您看到的问题确实是由BrowserSync
引起的。如果您想要离开lite-server
,您可以切换到一个简单的节点HTTP服务器:
使用提供的答案here:
connect
和serve-static
个包添加到项目server.js
添加到src目录(下面复制)。var connect = require('connect'); var serveStatic = require('serve-static'); connect().use(serveStatic(__dirname)).listen(8080, function(){ console.log('Server running on 8080...'); });
node src/server.js
除了这些步骤之外,我还必须将build / contracts / Adoption.json复制到src目录中。有更好的方法可以做到这一点,但我只是这样做的速度。
运行npm run dev
并重新加载浏览器(注意,链接的答案在端口8080上设置服务器而不是教程中的3000)。
此时并非100%完美(即成功领养后,您必须重新加载页面才能看到它变为"成功")。可以改进代码以更好地处理这些情况。
请注意,即使在多个标签/窗口中,您仍然共享相同的MetaMask插件。除非您在浏览器窗口之间切换时手动切换帐户,否则合同活动仍会共享。另一个(更好)的选择是运行两个不同的浏览器(我使用一个Chrome和一个Firefox)并设置MetaMask以在每个浏览器中使用不同的帐户。
答案 1 :(得分:0)
如@Adam Kipnis所示,将index.html
作为静态文件提供服务可以解决问题。从文件系统中打开index.html
阻止元掩码注入web3,因此唯一要做的就是创建一个静态提供文件的后端。 Adam的解决方案可以创造奇迹,我创建了另一个解决方案,无需将合同复制到src/
,只需将该文件夹设置为Express应该从中获取文件的静态文件夹。
const express = require('express')
const app = express()
app.use(express.static(__dirname + '/src'));
app.get('/', function(req, res) {
res.sendFile(__dirname+'/src/index.html');
});
app.listen(3000, () => console.log('Up!'))