基于区块链的在线分布式应用程序在不同的机器上显示同时行为

时间:2018-04-04 14:59:41

标签: blockchain web3js truffle

我是区块链和DAPP世界的新手。我一直在玩truffle website上的玩具示例(使用web3js)并创建我自己的DAPP,它与一个演示令牌(在ropsten上),一个涌入数据库(通过GET请求)交互,以及etherscan API。

我把它放在网上并尝试了一下,它可以创造奇迹,但是如果我在我的网络浏览器中打开它,而其他人在他们的打开它,当点击按钮,例如,加载我的余额并显示它,我正确看到它,但是打开DAPP的其他人看到装载的天平。这怎么可能,我该如何解决?

我使用固定地址来读取余额,并通过etherscan检查交易并通过D3显示它们。

谢谢!

2 个答案:

答案 0 :(得分:1)

正如评论中所提到的,您看到的问题确实是由BrowserSync引起的。如果您想要离开lite-server,您可以切换到一个简单的节点HTTP服务器:

使用提供的答案here

  1. connectserve-static个包添加到项目
  2. server.js添加到src目录(下面复制)。
  3. var connect = require('connect');
    var serveStatic = require('serve-static');
    connect().use(serveStatic(__dirname)).listen(8080, function(){
        console.log('Server running on 8080...');
    });
    
    1. 修改" dev" package.json到node src/server.js
    2. 的部分

      除了这些步骤之外,我还必须将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!'))