一、前言
从我开始接触区块链以来,我一直在思考链上的数据到底是什么。因此,我在交易所购买了比特币(BTC)和以太坊(ETH),以体验真实的区块链网络。但比特币网络只能记录转账信息,而以太坊具备图灵完备性,可以利用其平台进行去中心化应用(DApp)的开发。之前一直陷于技术问题,不过好在现在具备了这样的能力。
我想做的事情就是在以太坊网络上留下不可磨灭的名字,任何人可以调用但不可以修改。
二、成果
访问网站:https://hiwcq.com
三、实现步骤
1. 准备与合约交互的地址和ABI
2. 准备好工具和以太坊服务商,由前端去调用
3. 使用nginx将前端部署在服务器上
智能合约
首先将智能合约部署在以太主网上,合约很简单,主要想体验流程。
// SPDX-License-Identifier:MIT
pragma solidity ^0.8.0;
contract Hello{
string private name = unicode"hello 商务";
uint256 private blockNumber;
uint256 private deploymentTimeStamp;
constructor() {
blockNumber = block.number;
deploymentTimeStamp = block.timestamp;
}
function getName() public view returns(string memory) {
return name;
}
function getBlockNumber() public view returns(uint256) {
return blockNumber;
}
function getTimeStamp() public view returns(uint256) {
return deploymentTimeStamp;
}
}
提示:想要在以太主网上部署合约最好是在北京时间的下午部署,因为下午时间对应的美国凌晨,那时需要的gas费用比较少,我部署的这份简单合约就花了30左右的人民币๐·°(৹˃̵﹏˂̵৹)°·๐。也可以部署在测试网上比如Goerli,Sepolia,只不过测试网更新换代速度比较快。
我的合约地址:0x2B0C18a10241434883bC290c1818a84fc4b6F852
准备好合约之后可以在以太主网上查看合约
以太主网:https://etherscan.io/https://etherscan.io/
并获取到与合约交互的地址和ABI
准备工具和API接口
与合约交互现在比较流行的是ethers.js,web3.js,我采用的是web3.js
提供以太坊数据的服务商有Infura、Alchemy等,我这里使用的是Infura
服务器设置
现在有了代码,有了API接口就可以调用以太坊获取链上数据并将其部署在服务器上。但是由于普通的用户不具备访问以太坊网络的条件。所以说要先让自己的服务器能够访问以太坊网络(这一步特别麻烦,到最后我换了香港地域的服务器),再使用nginx做反向代理,使前端用户访问nginx代理服务器,再由服务器转发访问Infura接口,就大功告成了。
结语
其中有很多的细节并没有提到,比如如何设置https加密访问,nginx如何做反向代理等,虽然我在nginx反向代理上花了很多时间,但我觉得这些都与主线无关。
接下来有时间或者有条件了之后把WeBASE-Front部署在服务器上试试。