
和传统的App架构比较类似,都是前端和后台共同组成了一个完整的DApp,不同之处在于后台的实现方式变了,变成了去中心化的智能合约,这样导致了前端与后台的交互方式也发生了变化。
前端
对于前端来说的话,相比web2的App来说变化不大,仍然是html、css、js,最大的改变就是前端的交互对象由原来的中心化服务器变成了区块链上的智能合约。
•基于RPC与区块链通信,所以像之前的 axios 就不在适用,因为 axios 是基于http。但是随着web3基础设施的不断完善,出现了很多的第三方库来帮助我们完成与区块链的交互,比如etherjs、web3js、viem等,这些库帮我做的事情就是封装 Json-RPC 协议。
•不是直接访问区块链节点,因为在区块链中节点与节点之间同步数据需要一定的时间,如果等所有节点状态都同步完成才获取数据的话时间可能会非常之久,所以在前端与区块链节点之间久引入了RPC SERVER,只要区块链的任意节点数据更新之后状态都会第一时间给到RPC SERVER。提供RPC SERVER的厂商有很多,例如:infura、alchemy等。
•除了基于RPC SERVER厂商访问区块链,还可以通过链接第三方钱包来访问区块链,比如:MetaMask、Coinbase等,这种方式从本质来看还是基于RPC SERVER,只不过配置RPC SERVER由第三方钱包帮我们做了。
智能合约
智能合约是运行在区块链上的一段代码,对于兼容EVM的区块链来说,使用的是solidity,所以对于以太坊开发者来说,solidity是必须掌握的,就相当于在web2的java,然后就是一系列辅助开发的工具,比如:hardhat、openZeppelin等,这里面涉及到很多知识,不在这里一一阐述。
当我们智能合约开发并测试完成之后,还有一个比较重要的过程就是智能合约安全审计,这一过程非常重要。审计有助于确保跨 Web3 的去中心化应用程序的安全性、可靠性和性能。
去中心化存储
如果在开发过程中遇到存储大文件的场景,就需要用到去中心化存储,因为像比特币、以太坊、Polygon 等区块链,主要用于执行逻辑,是一个去中心化的计算平台,并不是为存储大量数据而设计的。当我们需要保存图片、音频、视频等内容时,则需要适合大数据的存储方案。
像Filecoin、Arweave、IPFS等都是一些比较知名的去中心化存储项目。
服务器
对于一个Dapp来说,并不是所有数据都得上链的,要根据具体场景而定,因为上链的过程成本还是比较高的,所以这时候就需要与传统的服务器进行配合。
这里值得注意的是,在web2当中,通常我们使用账号密码、微信、邮箱等方式来登录,但是这样做最大的弊病就是用户信息是存储在中心化数据库内部的,生成用于进一步身份验证的随机密钥也是中心化,对用户身份拥有最终控制权。显然对于一个Dapp项目来说,这种登录方式是不太合适的。
所以EIP4361: 以太坊登录就被提出来了,EIP-4361 的目的是希望通过使用 web3 服务 ( 如钱包和 dapps) 常用的方法来改变我们登录 web2 服务的方式。
总结
这里,只是从整体上描述了一个Dapp由哪几部分构成,更多细节没有过多的阐述。如果感兴趣,可以自行查阅资料。