尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
AMA Protocol的RPC代理与CORS:前端DApp直连节点的配置方法
AMA Protocol的RPC代理与CORS前端DApp直连节点的配置方法【免费下载链接】node项目地址: https://gitcode.com/GitHub_Trending/node95/node在区块链开发中前端DApp直接调用链上节点是常见的需求而RPC代理与**CORS跨域资源共享**往往是开发者最先遇到的拦路虎。AMA Protocol 的开源节点node项目内置了一套完整的 HTTP RPC 网关天然支持 CORS 预检与跨域响应头配合简单的环境变量即可完成RPC代理配置让浏览器里的 DApp 无缝直连节点查询余额、读取链上数据、提交交易。本文面向新手用最少的代码带你完成整套配置。 一、为什么前端DApp需要RPC代理与CORS浏览器有同源策略Same-Origin Policy页面只能访问同源的接口。当你的 DApp 部署在https://app.example.com而节点 RPC 服务在http://192.168.1.10:80时浏览器会直接拦截跨域请求报错形如Access to fetch at http://node-ip:80/api/... has been blocked by CORS policy解决办法有两个方向方案说明适用场景服务端开启 CORS节点在响应中携带Access-Control-Allow-Origin等头浏览器放行官方公共RPC、自建节点对外服务自建 RPC 代理同域反向代理转发请求规避跨域内网节点、不想暴露端口AMA Protocol 的节点把这两者都做到了自带 CORS 响应头 内置 RPC 代理转发前端几乎零成本接入。 二、节点自带的 HTTP RPC 网关AMA Protocol 节点内置了一个轻量级 HTTP 多路复用服务ex/lib/http/multiserver.ex监听 HTTP 请求并按路径分发到各 API 模块GET /api/wallet/balance/{pk}/{symbol}— 查询账户余额GET /api/chain/tip、/api/chain/tx/{txid}— 查询链信息与交易GET /api/contract/view/{contract}/{function}— 调用合约只读方法POST /api/tx/submit、/api/tx/submit_and_wait— 提交交易含等待最终确认GET /ws/rpc— WebSocket RPC支持升级GET /health、/metrics— 健康检查与监控指标所有响应都通过Photon.HTTP.Response.build_cors/4统一附加 CORS 头也就是说节点返回的每个 JSON 都天然允许跨域访问前端直接 fetch 即可。⚙️ 三、最快配置方法三个环境变量搞定 RPC 代理节点通过环境变量控制 HTTP 服务与上游代理全部定义在 runtime.exs 中环境变量默认值作用HTTP_IPV40.0.0.0HTTP RPC 服务监听地址HTTP_PORT80HTTP RPC 服务监听端口RPC_URLhttps://mainnet-rpc.ama.one上游 RPC 地址代理转发目标启动一个对外提供 RPC 服务的节点只需HTTP_IPV40.0.0.0 HTTP_PORT80 RPC_URLhttps://mainnet-rpc.ama.one ./amadeusd如果你想跑本地测试网把 RPC 指向自己README 中的官方做法# 把域名指向本地 vim /etc/hosts 127.0.0.1 nodes.amadeus.bot # 允许监听 80/443 端口 sudo sysctl -w net.ipv4.ip_unprivileged_port_start80 # 启动本地测试网 TESTNETtrue WORKFOLDER/tmp/testnet HTTP_IPV4127.0.0.1 HTTP_PORT80 ./amadeusd监听非特权端口如8080可省去sysctl步骤前端配合下方 CORS 配置即可直连。 四、CORS 是如何被处理的前端直连的关键1. 预检请求OPTIONS自动应答浏览器在发起跨域POST/自定义头请求前会先发一个OPTIONS预检。节点在handle_http/1中专门处理了OPTIONS与HEAD方法r.method in [OPTIONS, HEAD] - :ok :gen_tcp.send(state.socket, Photon.HTTP.Response.build_cors(state.request, 200, %{}, ))即预检直接返回 200 CORS 头无需任何额外配置。2. 每个响应都带 CORS 头无论是普通 JSON 响应、WebSocket 升级、Prometheus 指标还是代理转发的上游内容统一走build_cors/4保证前端拿到的每个包都包含Access-Control-Allow-Origin等头。3. 空结果自动转发上游dumb-proxy 模式这是 AMA 节点 RPC 代理的精髓当本地节点因裁剪pruner等原因没有历史数据时reply_or_proxy/3会把请求原样转发给上游 RPC并把上游状态码与响应体透传回来前端无感知defp reply_or_proxy(state, r, result) do if empty_response?(result) do proxy_get(state, r) # 本地无数据 → 代理到 RPC_URL else quick_reply(state, result) # 本地有数据 → 直接返回 end end这意味着无论数据在本节点还是上游前端 DApp 永远只面对一个同源地址跨域问题被彻底封装。 五、前端 DApp 直连节点的完整配置步骤以查询余额为例前端代码只需要一个fetch// 查询 AMA 余额 const res await fetch(${RPC_BASE}/api/wallet/balance/${pk}/AMA); const data await res.json();完整落地步骤清单获取节点地址公网节点用https://mainnet-rpc.ama.one自建节点用http://你的IP:端口。确认 CORS 生效浏览器开发者工具 → Network查看响应头是否包含Access-Control-Allow-Origin: *。配置 RPC 代理可选若前端与节点不同域且有代理服务如 Nginx把/api/与/ws/rpc转发到节点端口即可。WebSocket 长连接需要实时推送时连接ws://节点地址/ws/rpc节点同样处理了升级握手与 CORS。提交流程先POST /api/contract/validate校验合约再POST /api/tx/submit提交打包后的交易或用submit_and_wait?finalizedtrue等待最终确认。本地联调跑一个TESTNETtrue的本地节点把 RPC 指向127.0.0.1配合浏览器无 CORS 模式快速调试详见仓库 README.md。️ 六、常见问题与排错指南症状原因解决办法浏览器报 CORS 错误访问的是第三方 RPC 或代理未透传头改用官方 RPC或自建节点用默认网关直连返回 404 且本地有数据路径写错对照multiserver.ex中/api/...路由逐一核对返回 429触发限流节点按 IP 限流如/api/upow/seed每分钟100次降低请求频率payload_too_large请求体超限默认上限 1MB交易提交接口上限为tx_size * 2请求超时节点空闲超时60秒检查网络与节点状态长查询改用轮询✅ 总结AMA Protocol 的节点把RPC 代理 CORS封装成了一套零配置的默认能力响应自带跨域头、OPTIONS 预检自动应答、本地无数据自动转发上游。前端 DApp 开发者只需拿到节点 HTTP 地址就能用普通fetch完成余额查询、合约调用与交易提交彻底告别跨域配置噩梦。需要本地联调时参考 README.md 的 Testnet 章节或用HTTP_IPV4/HTTP_PORT/RPC_URL三个环境变量自定义你的 RPC 服务形态。相关源码速览HTTP 网关与代理分发ex/lib/http/multiserver.exRPC 客户端与上游请求ex/lib/api/rpc_api.ex环境变量定义ex/config/runtime.exs节点启动与监听ex/lib/ex.ex【免费下载链接】node项目地址: https://gitcode.com/GitHub_Trending/node95/node创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

如何让扫描PDF支持搜索:OCRmyPDF 完整上手指南

如何让扫描PDF支持搜索:OCRmyPDF 完整上手指南

如何让扫描PDF支持搜索:OCRmyPDF 完整上手指南 【免费下载链接】OCRmyPDF OCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched 项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDF 扫描仪吐出来的 PDF&#xff0…

📅 2026/10/21 14:30:22
迪奥999滋润款OEM代工,正红唇膏的物料底牌和车间验货死角

迪奥999滋润款OEM代工,正红唇膏的物料底牌和车间验货死角

拿着法系头部D家经典正红口红体系的色卡图来找源头代工,十个白牌定制老板有九个第一句话问“色号能不能做到一模一样”,剩下那个问“能不能守住车间裸料成本”。说句难听的,颜色这东西,正规色粉厂三天就能调出来;真正让…

📅 2026/10/19 15:33:46
从旧版NATS.Client迁移到NATS.Net:完整升级指南与踩坑避雷清单

从旧版NATS.Client迁移到NATS.Net:完整升级指南与踩坑避雷清单

从旧版NATS.Client迁移到NATS.Net:完整升级指南与踩坑避雷清单 【免费下载链接】nats.net The official C# Client for NATS 项目地址: https://gitcode.com/gh_mirrors/na/nats.net NATS.Net 是 NATS 官方推出的新一代 C# 客户端库,全面支持异步…

📅 2026/10/18 9:53:47
MORE NEWS

更多资讯

📰

Python+OpenAI API:从零构建带记忆的聊天机器人实战

我第一次尝试用 Python 调用 OpenAI API 做聊天机器人的时候,心态特别简单:只要能发一句话过去,得到一句回复,就算成功了。可真上了手才发现,很多教程只告诉你调用接口那三五行代码,却不会告诉你上下文怎么…

📰

10月25日:Windows XP、编程语言先驱与通信巨头如何塑造计算史

1. 三个改变计算史的时刻为何落在同一天10 月 25 日这个日期,在计算机发展的时间轴上密集地叠着三件事:一款统治了个人计算近二十年的操作系统正式面向大众发售,一位后来深刻影响全球通信设备格局的企业创始人出生,一位奠定编程语…

📰

lingbot-map:从原始地理数据到交互地图的加工流水线

lingbot-map这个名字,乍一看像是某个聊天机器人插件附带的子模块,但它本质上是一个独立的地图数据加工与发布工具。我自己第一次接触这个项目时,是接到一个模拟项目X的需求:需要在最短时间内把一份杂乱的路网Excel和一批POI点数据…

📰

大模型高级微调实战:从LoRA参数配置到训练评估的完整指南

坦白说,第一次接触“task05高级微调技术”这个任务时,我脑子里闪过一长串疑问:为什么还要专门做微调?直接在提示词里写清楚要求不行吗?训练数据和GPU从哪来?等到自己动手跑完一轮完整的微调流程之后&#x…

📰

MBENET驱动实战:Modbus RTU转TCP网关配置与避坑指南

简介:MBENET驱动是一套面向工业自动化与Modbus TCP通信开发的驱动组件,适合需要将设备接入以太网、实现PLC、HMI等支持Modbus协议设备间数据交换的开发者与运维人员使用。资源包共101个文件,以42个dll动态库、19个exe可执行程序、10个chm帮助…

📰

AIGC检测中的困境度:为何AI概率之外更需关注模型纠结度

1. 困境度指标到底在衡量什么先聊一个特别常见的场景:你把一段文本扔进AIGC检测工具,页面右侧跳出两行结果,一行写着“AI生成概率:78%”,另一行写着“困境度:0.31”。大部分人的视线会被78%带走&#xff0c…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬