Skip to main content

Command Palette

Search for a command to run...

jLab:郭宇的Web3开发最佳实践阅读笔记-7

Published
1 min read

jLab:郭宇的最佳实践阅读笔记-7

概述

阅读大牛郭宇的文章

https://guoyu.mirror.xyz/RD-xkpoxasAU7x5MIJmiCX4gll3Cs0pAd5iM258S1Ek

第六篇笔记见这里:here,主要是客户端和开发、测试环境。

本篇主要说服务器端方案,包括编码技术栈和集成发布方案。

概述

个人见解,未来应用的部署方式(服务器端),会是复杂和交叉的,云计算,边缘计算,甚至自己还思考过类似P2P的点即服务的雨计算(这个话题有兴趣的可以聊),都会存在。因为以太坊这个世界计算机还在进化之中,目前

  1. 链上存储和计算成本昂贵

  2. 链上技术能力也无法支持类似传统服务器的各种操作系统和Runtime

  3. 交互体验不好,反复授权签名

  4. 一些过程数据、索引和交叉计算,链上成本和性能都很差。

所以Uniswap直接抛弃了服务器,只有前端页面和合约,但这个是特殊的,大部分需要特地个的业务计算,网页的WebAssembly还在发展之中,因此Server是保障业务正常和较好体验的保障。

而对于UI来说,目前可以IPFS活着ARweave等等方式去中心了,但警惕:不要过度依赖Server端来运行业务,郭宇举例是:不能将核心逻辑放在私有服务器中依赖,或者一味使用服务端储存的机器人钱包私钥来操作区块链,这个很重要,否则你的就不是DApp了,呵呵。

目前习惯的使用Node技术,一部分和Provider/Signer交互的业务逻辑可能复用。

开发环境

  1. 使用Node,技术栈是Next.js + Vercel直接github repo 自动构建,这里有个注意事项,可以建立dev分支,本地测试稳定后,再merge到main分支,然后线上自动发布,否则会持续自动发布。如果你使用的Fleek免费版,是有构建时间限额的。

  2. 对于复杂DApp来说,多个对象、关系表,需要多次聚合和计算的,使用FaaS,郭宇推荐Firebase,我个人是没怎么用过FaaS的,记得用过最多的是图片处理的一些FaaS。郭宇推荐:你可以使用 Firebase 快速连接实时数据库,整合 Twitter 或 GitHub 的第三方登录,它还提供非常好用的本地模拟器工具套件,以及,它能够非常好地支持跨平台,Google的招牌足够大,倒是可以考虑。其他方案前面说过。Firebase

  3. Server端有两个Web3技术栈

    1>SIWE,Ethereum官方推荐的登录集成体系,自己写个Demo就了解了,两个API,/nonce/vertify,参考这里:Demo

    钱包登录只需要使用前端脚本连接钱包即可,但这种逻辑很容易被 hack,因为任何客户端状态都能够被低成本修改,因此要使用稳定方案SIWE,标准化开发者使用钱包登录授权 Off-chain 产品的逻辑。

    2> SIWE支持广泛:JavaScript, Rust, Python, Golang, Ruby,可以使用Next.js的NextAuth 来快速整合它。

    Siwe 通过对服务端发行的随机 nonce 和其他标准输入进行签名,再通过服务端验证签名内容的方式来确认提交方的地址,简单说,就是一个签名+校验机制,和OAuth2简单点。

    3> Server和Relay交互

    郭宇:使用Provider 与 Relay Network 通信(只读模式),比如,我们通过整合区块高度,某个合约状态和订阅事件,来组建我们自己的数据缓存服务并提供 API,那我们只需要按照前端的方式与 Relay Network 建立通信即可。在这种模式下,我们可以把 access key 存放在生产环境的环境变量中,我推荐你使用 dotenv 去处理它们,利用系统机制保护密钥,Node使用process.env获取。

    这里不难理解,如果读写模式,例如币安这样的大型交易所,或者自己的DEX,都会涉及机器人钱包和密钥的问题。

    做这些之前,要进行安全规划,分清边界、风险来源、最大风险和应对、check以及措施。类似于公司的合规风控一样,这里是核心,否则死都不知道怎么死的。

    使用环境变量绝对是自杀,因为往往会全局,明显是范围扩大,作死。传统的,郭宇建议是采用专业的私钥管理服务来管理,例如使用 Google Secret Manager 或者 AWS Secrets Manager 来进行管理。

    4>其他

    通过 Provider 和 Signer 与 Relay Network 进行通信只需要传递钱包私钥给对应的 Provider/Signer 实例即可完成操作,与本地进行单元测试的机器人钱包一样,它不会有额外的确认过程(这个千万记住了,等于家门钥匙给别人了,以前是你交互确认,给别人开门),因此,我们需要确认钱包中有足够的 ETH 或其他 Gas token 余额,否则该交易会失败。

  4. 一些SDK

    更方便地在服务端与合约进行通信,有集成的例如ThirdWeb,这个没用过,因为自己还没有开发过大型的复杂DApp,郭宇推荐:Thirdweb 提供了一个 SaaS 合约开发平台,你可以通过它的前端 App 发布预设功能的合约,例如 NFT Drop 或者 NFT 交易平台,也可以使用它提供的第三方 access key 与已发布的合约进行通信(而无需依赖合约的 ABI)。听起来不错。

    使用范例:(Next),JavaScript SDK(Typescript)

    import { ThirdwebSDK } from "@thirdweb-dev/sdk";
    
    // The RPC url determines which blockchain you want to connect to
    const rpcUrl = "https://polygon-rpc.com/";
    // instantiate the SDK as read only on a given blockchain
    const sdk = new ThirdwebSDK(rpcUrl);
    
    // access your deployed contracts
    const nftDrop = sdk.getNFTDrop("0x...");
    const marketplace = sdk.getMarketplace("0x...");
    
    // Read from your contracts
    const claimedNFTs = await nftDrop.getAllClaimed();
    const listings = await marketplace.getActiveListings();
    

More from this blog

让你的私钥随时更换,可以四处旅行

是的基于社交恢复和社区运行的TEE KMS,普通个体的私钥可以依赖多层安全机制:passkey+Email+社区KMS(硬件安全)+AA多签(可适配多种签名机制,增加抗量子签名模块)。听起来非常棒!是人类数字未来中需要的东西。下面是我的一个研究项目,进行中,有经验的大牛可以指点一下(嵌入式和硬件钱包开发、TEE、抗量子等等)。 STM32MP157F-DK2 Development Project STM32MP157F-DK2 开发项目 🇬🇧 Jump to English Vers...

Jan 25, 20263 min read

人性之光-以自由之名

以自由之名 v0.1.5 有点怪怪的标题,原谅理工男的简单和直接。 先分享一点感触和认知:某个角度看,人性是想象力、创造力和情感,是人类独有的特质。 人性是区别于AI和机器人,以及其他生命和造物的独有内核。人性是一种对自由的追求:发挥你的想象力、创造力,拥有自己的情感,是人存在的一种方式,这种方式,称为自由。 作为普通个体,想在人类社会拥有自由,除去国家和法律赋予的基础保障和基本权利之外,哈耶克有个观点是时间、空间和选择的范围,是自由的基础保障;而福柯则反向给出了规训的方式:时间空间和力量(并非...

Jan 25, 20261 min read

How to play with AI vibe coding?

我们要和 AI 沟通,要总结几个经验,供大家参考(血泪教学,迭代无数次): 三个重点 重设计、三层文档体系、渐进式开发。 第一点 最重要就是设计一定要占据你开发时间的一半以上,包括研究,包括和 AI 的交互讨论,包括提取一些专题,然后跟其他的 AI 交流生成深度的报告,包括自己阅读相关的报告和分析,以及一些范例的 repository。 第二点 要完整的文档体系,不管哪一种,都要跟随文档体系来去不断地迭代你的和 AI 交互的过程;我现在使用的是,嗯,三层的文档管理体系。第一层呢是backlog...

Aug 17, 20252 min read

It is Fun for me.

jFlow: from research to production 创新之路:最有趣的探索之路。 创新之路 Road of Exploration Research Input=Idea:描述你的 idea,进行严谨的论证过程,逻辑结构类似于缩小版本的 SCI 论文。通过分析论证,得出结论,是真正有价值创新。 output=Solution:定义你的产品,包括产品定位、目标用户、核心功能、商业模式,让团队、社区、早期投资者、用户、合作伙伴等,都快速了解你的产品的价值所在。 Devel...

Aug 12, 20251 min read

我的AI小助手:RAG 本地测试记录(updating...)

预期: 数据: 本地个人计划和隐私、正常论文相关的科研、业界跟踪和研究分析,三大类都存储在本地,不要流出个人电脑。 初步的7B模型(本人MiniMac的上限)进行大体分析。 可以使用外部deepseek和grok,claude等外部API,但沟通内容是隔离和脱敏的,最简单就是7B分析的结论,进行隐私脱敏(自行设定脱敏规则)和单独目录存储(独立知识库),这个动作是离线断网进行。 然后针对沟通外部的独立知识库,可以充分利用外部大模型能力。 个人计划是使用雷电连接mac book和mac m...

Mar 15, 20251 min read

jLab

69 posts

It is my Lab for curiosity!