Metamask 也会作为提供商与区块链进行链接。因为 Metamask 需要签署交易,所以它与 Infura 提供的节点建立了连接。在某种程度上说,Metamask 既是提供者又是签名者。 在区块链上存储当然,如果你所搭建的应用中所有智能合约和数据都存储在以太坊上的话,那么这种架构还算合理。然而,在以太坊上搭建过应用程序的人都知道,在区块链上存储虽然快捷,但价格也不菲。 我们要明白,用户每次在以太坊上添加新数据都要付费。这是因为去中心化的状态机是由节点来维护的,而在状态机上每新增一个状态,都会增加节点的成本。 如果你的 DApp 每次在用户交易需要添加新状态时,都要求他们支付额外费用的话,那么用户体验是很差的。不过,使用去中心化链下存储方案,如 IPFS 或 Swarm,便可以解决这一问题。 IPFS 是一个用于存储与访问数据的分布式文件系统。也就是说,IPFS 系统并不是将数据存储在一个中心化的数据库中,而是将数据分布式存储在 P2P 网络中,让你随时可以对数据进行检索。 「Filecoin」是 IPFS 的激励层,其作用是激励世界各地的节点来存储和检索这些数据。你可以使用像 Infura 或 Pinata 这样的提供商,因为 Infura 可以为你提供 IPFS 节点,而 Pinata 则可以让你将文件在 IPFS 中「定位」,继而得到 IPFS 的哈希值并将其存储在区块链上,且整个操作过程相当简单。 Swarm 是一个去中心化的存储网络,和 IPFS 有很多相似之处,但二者也有一个明显区别。那就是,Filecoin 系统相对独立,Swarm 的激励系统是内置的,由以太坊上的智能合约来执行,用于数据的存储与检索。 所以现在,有了 IPFS 或 Swarm,我们的应用架构会是这样的: ![]() 在下图当中,机智的你可能会注意到,前端代码并没有存储在区块链上。其实我们完全可以和我们在 Web 2.0 中所做的一样,将代码存储在 AWS 上面,但这样做也意味着你的 DApp 会受到来自中心化的制约。比方说,如果 AWS 瘫痪了怎么办?如果它对你的应用程序进行审查又该怎么办? 这也就是为什么,如果你想搭建一个真正的去中心化应用程序,你会选择像 IPFS 或 Swarm 这样的去中心化存储方案来储存前端了。 所以现在你的应用架构会变成这样: ![]() 到目前为止,我们已经探讨了如何通过签署交易并将它们发送到区块链上来完成交易的写入。但从区块链上的智能合约中读取数据又该如何操作呢?主要有以下两种方式: 智能合约事件你可以利用 Web3.js 库来查询和监听智能合约事件。你也可以使用 Web3.js 监听特定事件,并指定一个回调函数在每次事件触发时进行调用。比如说,现在假设有一个智能合约可以在每个区块中的发送者与接收者之间发送连续支付流,那么每次向接收者支付款项时,你都可以发出一个智能合约事件。前端代码可以监听由智能合约所触发的事件,并据此采取相应行动。 (责任编辑:admin) |