WAX技术指南第九期:如何构建一个WAX Atomic API节点
原文:EOSphere (Ross Dold) 翻译:WAX Eastern (NFT Gamer)
Pink.gg 开发的 AtomicAssets NFT 标准因为WAX 市场 AtomicHub 的广泛使用成为了WAX 协议网络最流行的 NFT 标准 。
AtomicAssets NFT 标准与其他替代方案不同,它不需要用户提供任何 RAM,并提供本地双向交易报价以及支持使用代币背书 NFT。 您可以在 https://atomicassets.io/ 上阅读有关该标准的更多信息。
当然,如果用户和开发人员无法通过可扩展的 API 以简单有效的方式访问实时数据,那么任何出色的 NFT 框架都是不完整的,这就是 Pink.gg 开发 eosio-contract-api 也称为 Atomic API 的目的。
第 9 期 WAX 技术指南将介绍构建和运行 WAX Atomic API 节点的过程,使您作为公会或开发人员能够为生态系统提供非常有用的 API 服务……或者可能只为您个人提供。
如何设置 WAX Atomic API 节点
公共Atomic API 节点在 WAX 主网上得到了极大的利用,用户和 DApp 可以使用它们来查询Atomic资产和Atomic市场的状态和历史记录。
如果您希望虚拟化运行,则可以在 docker 中运行可靠的主网节点,如果您更喜欢在系统级别运行它,则可以通过 PM2 运行。
本文将介绍构建应用程序依赖项并使用 PM2 运行节点的过程。
主网要求
硬件
8 核 CPU / 5Ghz+ 推荐
1TB+ 磁盘/企业级 SSD 或 NVMe
目前(2022 年 2 月)一个完整的节点使用大约 530GB 的磁盘空间,而 postgres 数据库目前使用 515GB。
64GB+ 内存
操作系统
Ubuntu 20.04(推荐)
SHIP节点
访问最新的 2.0.12–13 WAX State-History 节点
同一 LAN 上的 SHIP 节点(强烈推荐)
网络
现代互联网宽带/光纤连接(100Mb/s 同步及以上)
1Gb/s+ 局域网
构建软件
在撰写本文时,eosio-contract-api 的当前版本是 v1.3.7
应用程序依赖项(一些我们的建议)
Node.js >= 16.0
PM2.5
PostgreSQL >= 14.0
Redis >= 5.0
Yarn
应用程序安装和配置过程
节点JS
> curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
> sudo apt install -y nodejs
**Check Version***
> node -v
PM2
> sudo npm install pm2 -g
**Check Version**
> pm2 -v
安装 Postgres 如下:
> sudo apt-get install wget ca-certificates
> wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
> sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
> sudo apt update
> sudo apt install postgresql postgresql-contrib
**Check Version**
> apt show postgresql
安装后需要创建新数据库并在必要时分配权限,此示例将使用默认的 postgres 用户。
> sudo su - postgres
> psql
**Assign a password to the postgres account**
postgres=# \password
Enter new password:
Enter it again:
**Create the database**
postgres=# \l (lists databases)
postgres=# CREATE DATABASE "api-wax-mainnet-atomic-1";
postgres=# \l+ (lists databases - including size)
postgres=# \q (quit)
> exit
Redis
> curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
> echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
> sudo apt update
> sudo apt install redis
**Check Version**
> redis-server --version
**If there is a unmask error then**
> sudo systemctl unmask redis-server.service
Yarn
> sudo npm install --global yarn
**Check Version**
> yarn --version
Atomic API
最新的搭建说明可以在 Pink.gg Github 上找到。
安装
> git clone https://github.com/pinknetworkx/eosio-contract-api.git
> cd eosio-contract-api
> yarn install
配置
针对您的具体部署需要调整三个配置文件
connections.config.json
server.config.json
readers.config.json
以下是此示例的基本配置,请根据您自己的部署进行调整:
connections.config.json
> cd ~/eosio-contract-api/config
> cp example-connections.config.json connections.config.json
> nano connections.config.json
{
"postgres": {
"host": "127.0.0.1",
"port": 5432,
"user": "postgres",
"password": "YOUR POSGRESS PASSWORD",
"database": "api-wax-mainnet-atomic-1"
},
"redis": {
"host": "127.0.0.1",
"port": 6379
},
"chain": {
"name": "wax-mainnet",
"chain_id": "1064487b3cd1a897ce03ae5b6a865651747e2e152090f99c1d19d44e01aea5a4",
"http": "http://10.0.0.65:8888",
"ship": "ws://10.0.0.65:8080"
}
}
> cd ~/eosio-contract-api/config
> cp example-server.config.json server.config.json
> nano server.config.json
{
"provider_name": "EOSphere Guild",
"provider_url": "https://eosphere.io",
"server_addr": "0.0.0.0",
"server_name": "wax-atomic-api.eosphere.io",
"server_port": 9000,
"cache_life": 5,
"trust_proxy": true,
"rate_limit": {
"interval": 60,
"requests": 240,
"bill_execution_time": true
},
"ip_whitelist": [],
"slow_query_threshold": 7500,
"max_query_time_ms": 10000,
"max_db_connections": 50,
"namespaces": [
{
"name": "atomicassets",
"path": "/atomicassets",
"args": {
"atomicassets_account": "atomicassets",
"connected_reader": "atomic-1",
"socket_features": {
"asset_update": false
}
}
},
{
"name": "atomicmarket",
"path": "/atomicmarket",
"args": {
"atomicmarket_account": "atomicmarket",
"connected_reader": "atomic-1",
"socket_features": {
"asset_update": false
},
"api_features": {
"disable_v1_sales": true
}
}
},
{
"name": "atomictools",
"path": "/atomictools",
"args": {
"atomictools_account": "atomictoolsx",
"atomicassets_account": "atomicassets",
"connected_reader": "atomic-1"
}
}
]
}
readers.config.json
Pink 团队的建议是索引只需要从区块 64000000 开始
> cd ~/eosio-contract-api/config
> cp example-readers.config.json readers.config.json
> nano readers.config.json
[
{
"name": "atomic-1",
"server_addr": "0.0.0.0",
"server_port": 9001,
"start_block": 64000000,
"stop_block": 0,
"irreversible_only": false,
"ship_prefetch_blocks": 50,
"ship_min_block_confirmation": 30,
"ship_ds_queue_size": 20,
"db_group_blocks": 10,
"ds_ship_threads": 4,
"modules": [],
"contracts": [
{
"handler": "atomicassets",
"args": {
"atomicassets_account": "atomicassets",
"store_transfers": true,
"store_logs": true
}
},
{
"handler": "delphioracle",
"args": {
"delphioracle_account": "delphioracle"
}
},
{
"handler": "atomicmarket",
"args": {
"atomicmarket_account": "atomicmarket",
"store_logs": true
}
},
{
"handler": "atomictools",
"args": {
"atomictools_account": "atomictoolsx",
"store_logs": true
}
}
]
}
]
启动/停止Atomic API 服务
在这个例子中,Atomic API 服务将从块 64000000 开始索引,并将构建一个新的 postgres 数据库到当前的 headblock。
这需要一些时间,建议您在开始公开提供 API 之前确保索引已经赶上。
> cd ~/eosio-contract-api
***Start Postgres Indexing Filler***
> pm2 start ecosystems.config.json --only eosio-contract-api-filler
***Start the API Server***
> pm2 start ecosystems.config.json --only eosio-contract-api-server
***Monitor Filler and Server***
> pm2 log
注意:停止填充服务有时会出现问题,过早重新启动会导致两个填充实例运行,从而导致数据库损坏。 要解决这个问题,请确保填充程序实际上已通过在重新启动之前使用 top 或 htop 监视活动服务来停止对 postgres 的索引。
***Stop Postgres Indexing Filler***
> pm2 stop eosio-contract-api-filler
***Stop the API Server***
> pm2 stop eosio-contract-api-server
**Stop All***
> pm2 stop all
***Check using top or htop***
您的节点可以通过 http 端口 9000 访问,当公开提供服务时,最好在 SSL 卸载负载均衡器(例如 HAProxy 或 nginx)之后提供服务。
查询你的节点状态如下:
> curl http://x.x.x.x:9000/health
> curl http://x.x.x.x:9000/atomicassets/v1/config
> curl http://x.x.x.x:9000/atomicmarket/v1/config
> curl https://x.x.x.x:9000/atomictools/v1/config
防失联,加入橘猫玩家公会:
Telegram:https://t.me/NFTGamerChina
Discord:https://discord.gg/NU82sXeTNs
阅读原文,获取详细信息