Skip to main content

Command Palette

Search for a command to run...

Between Web3 and Web2: SoulWallet's Backend Tech Stack--AWS Lambda

Published
4 min read

On wtiring...

Between Web3 and Web2: SoulWallet's Backend Tech Stack--AWS Lambda

  • Web3需要依赖Web2,这个是一个现状,未来也会很长期的现状,Web3不是真空,是Web的一个新形态应用而已。

  • 许多Web3应用都会用到和Email、Twitter等等传统的Web2应用打交道,那如何设计一个随着应用复杂度增长而可伸缩,初期开发难度不高,后期可扩展的技术架构,来支撑这个桥接场景呢?我们以Email为例,其他Twitter也类似了,抛下一些思考和实践过程。

  • 本文也是SoulWallet产品的Email验证服务作为后端服务,使用AWS Lambda快速搭建的过程,记录下来,分享给各位Web3 builder。

Mail技术选型

应用背景

  • Web3的钱包,需要拥有者设置自己或者他人可信的Email,作为Guardian,整个业务过程包括:

  • 验证邮件可信(发验证码+收到验证码verify)、验证安全签名DKIM(可选,后期加)、作为Guardian参与Recvery。

可能的函数

get4RandomNumber

sendMail2Address

verify4RandomNumber

sendRecoveryHashMail

verifyDKMIHash2Recovery

get6RandomNumber

sendMail2BatchAddress

verify6RandomNumber

使用API Gateway调用,先用OAuth2?

评估

  • 1>AWS Lambda+ AWS SES

  • 好处:按需付费,开发技术栈稳定简单(相对),未来可扩展,坏处:不是去中心,长期可能有一些隐患

  • 2>Docker化使用Hanko

  • 坏处:技术难度略高,需要自己修改定制,好处:标准Docker+配置,可以部署和扩展在任何地方,去中心

分析

  • 1.中心化服务,例如AWS S3、Google Firebase会长期存在,并且服务也较为稳定。

  • 2.一些非核心的应用场景,例如邮件服务、验证服务等的,可以放在中心化服务器。

  • 3.用Serverless快速搭建服务,并且沉淀出模型,形成快速可迁移的能力,也是某种层次的去中心。

  • 4.对于非核心服务的部分中心化,最坏情况下需要不能影响客户的核心体验(这个要评估和实验)。

  • 5.所有代码如果开放开源,则可以用类似Stake方式,让更多节点把安全中心去中心化,则更稳定和去中心。

设计

交互泳道图

email-flow.png

开发

准备

  1. 进入AWS,搜索Lambda服务,进入,创建一个Lambda function。

几个图片参考下,很简单

截屏2022-09-05 11.15.41.png 截屏2022-09-05 11.16.36.png 截屏2022-09-05 11.16.49.png 截屏2022-09-05 11.28.59.png 截屏2022-09-05 11.29.06.png 截屏2022-09-05 11.29.13.png

  1. Mac 下安装SAM:
brew tap aws/tap
brew install aws-sam-cli

注意,我遇到了404问题,解决办法

 brew install aws-sam-cli
==> Downloading https://mirrors.ustc.edu.cn/homebrew-bottles/bottles/python%403.8-3.8.12_1.monterey.bottle.tar.gz
curl: (22) The requested URL returned error: 404                              

Warning: Bottle missing, falling back to the default domain...
==> Downloading https://ghcr.io/v2/homebrew/core/python/3.8/manifests/3.8.12_1
Already downloaded: /Users/jason/Library/Caches/Homebrew/downloads/61f42b7874c869da77ca6a2c68ce8fba17392d585f49a57c4f98b846e4255d4f--python@3.8-3.8.12_1.bottle_manifest.json
==> Downloading https://ghcr.io/v2/homebrew/core/python/3.8/blobs/sha256:9003ba90da12f509084675de2ac639356aa929f99483115250b7cfb154ade246
Already downloaded: /Users/jason/Library/Caches/Homebrew/downloads/1277a706a480613882eed92d3a3d8d64b8685f2ebc814c888765c4044ce32cd9--python@3.8--3.8.12_1.monterey.bottle.tar.gz
==> Downloading https://github.com/aws/aws-sam-cli/releases/download/v1.56.0//aws-sam-cli-1.56.0.sierra.bottle.tar.gz
==> Downloading from https://objects.githubusercontent.com/github-production-release-asset-2e65be/92205085/29934f42-b9b2-46f8-8901-4cc832ca4988?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYA
######################################################################## 100.0%
==> Installing aws-sam-cli from aws/tap
==> Installing dependencies for aws/tap/aws-sam-cli: python@3.8
==> Installing aws/tap/aws-sam-cli dependency: python@3.8
==> Pouring python@3.8-3.8.12_1.monterey.bottle.tar.gz
Error: No such file or directory @ rb_sysopen - /Users/jason/Library/Caches/Homebrew/downloads/43fd497f6cd5d3be88e46f093783bcfb87796f443dbf38b2060d8b336e25d8ba--python@3.8-3.8.12_1.monterey.bottle.tar.gz

复制一份即可

cp -a /Users/jason/Library/Caches/Homebrew/downloads/1277a706a480613882eed92d3a3d8d64b8685f2ebc814c888765c4044ce32cd9--python@3.8--3.8.12_1.monterey.bottle.tar.gz /Users/jason/Library/Caches/Homebrew/downloads/43fd497f6cd5d3be88e46f093783bcfb87796f443dbf38b2060d8b336e25d8ba--python@3.8-3.8.12_1.monterey.bottle.tar.gz
  1. ``` #Step 1 - Download a sample application sam init

#Step 2 - Build your application cd sam-app sam build

#Step 3 - Deploy your application sam deploy --guided



初始化过程,可参考

cd ~/Dev/Projects/soulwallet-backend jason@HuifengjiaodeMacBook-Pro

~/Dev/Projects/soulwallet-backend (main) » ls jason@HuifengjiaodeMacBook-Pro README.md

~/Dev/Projects/soulwallet-backend (main) » sam init jason@HuifengjiaodeMacBook-Pro

SAM CLI now collects telemetry to better understand customer needs.

You can OPT OUT and disable telemetry collection by setting the
environment variable SAM_CLI_TELEMETRY=0 in your shell.
Thanks for your help!

Learn More: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-telemetry.html
More:

You can preselect a particular runtime or package type when using the sam init experience. Call sam init --help to learn more.

Which template source would you like to use? 1 - AWS Quick Start Templates 2 - Custom Template Location Choice: 1

Choose an AWS Quick Start application template 1 - Hello World Example 2 - Multi-step workflow 3 - Serverless API 4 - Scheduled task 5 - Standalone function 6 - Data processing 7 - Infrastructure event management 8 - Lambda EFS example 9 - Machine Learning Template: 1

Use the most popular runtime and package type? (Python and zip) [y/N]: n

Which runtime would you like to use? 1 - dotnet6 2 - dotnet5.0 3 - dotnetcore3.1 4 - go1.x 5 - graalvm.java11 (provided.al2) 6 - graalvm.java17 (provided.al2) 7 - java11 8 - java8.al2 9 - java8 10 - nodejs16.x 11 - nodejs14.x 12 - nodejs12.x 13 - python3.9 14 - python3.8 15 - python3.7 16 - python3.6 17 - ruby2.7 18 - rust (provided.al2) Runtime: 10

What package type would you like to use? 1 - Zip 2 - Image Package type: 1

Based on your selections, the only dependency manager available is npm. We will proceed copying the template using npm.

Select your starter template 1 - Hello World Example 2 - Hello World Example TypeScript Template: 1

Would you like to enable X-Ray tracing on the function(s) in your application? [y/N]: y X-Ray will incur an additional cost. View https://aws.amazon.com/xray/pricing/ for more details

Project name [sam-app]: testSAM

Cloning from https://github.com/aws/aws-sam-cli-app-templates (process may take a moment)




    Generating application:
    -----------------------
    Name: testSAM
    Runtime: nodejs16.x
    Architectures: x86_64
    Dependency Manager: npm
    Application Template: hello-world
    Output Directory: .

    Next steps can be found in the README file at ./testSAM/README.md


    Commands you can use next
    =========================
    [*] Create pipeline: cd testSAM && sam pipeline init --bootstrap
    [*] Validate SAM template: sam validate
    [*] Test Function in the Cloud: sam sync --stack-name {stack-name} --watch

进入目录,build:

cd testSAM jason@HuifengjiaodeMacBook-Pro

~/Dev/Projects/soulwallet-backend/testSAM (main*) » ls jason@HuifengjiaodeMacBook-Pro README.md events hello-world template.yaml

~/Dev/Projects/soulwallet-backend/testSAM (main*) » vim build.sh jason@HuifengjiaodeMacBook-Pro

~/Dev/Projects/soulwallet-backend/testSAM (main) » chmod +x .sh jason@HuifengjiaodeMacBook-Pro

~/Dev/Projects/soulwallet-backend/testSAM (main*) » ./build.sh jason@HuifengjiaodeMacBook-Pro Your template contains a resource with logical ID "ServerlessRestApi", which is a reserved logical ID in AWS SAM. It could result in unexpected behaviors and is not recommended. Building codeuri: /Users/jason/Dev/Projects/soulwallet-backend/testSAM/hello-world runtime: nodejs16.x metadata: {} architecture: x86_64 functions: HelloWorldFunction Running NodejsNpmBuilder:NpmPack Running NodejsNpmBuilder:CopyNpmrcAndLockfile Running NodejsNpmBuilder:CopySource Running NodejsNpmBuilder:NpmInstall Running NodejsNpmBuilder:CleanUpNpmrc Running NodejsNpmBuilder:LockfileCleanUp

Build Succeeded

Built Artifacts : .aws-sam/build Built Template : .aws-sam/build/template.yaml

Commands you can use next

========================= [] Validate SAM template: sam validate [] Invoke Function: sam local invoke [] Test Function in the Cloud: sam sync --stack-name {stack-name} --watch [] Deploy: sam deploy --guided

```

部署

Invoke

其他

参考

AWS SES :https://aws.amazon.com/cn/ses/

Lambda Dev Progress:https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/serverless-apps.html#serverless-apps-create

补充

后续因为Security Center定义发生变化,承载了更多的业务功能,所以上述设计工作架构变化不大,但是开发工作量更多了。

技术栈

Web2的设计思维,是中心化大集群的业务场景,因此会把复杂场景拆解为微服务,而后来发现,微服务还不够(大厂的业务流程太复杂了),因此进化出了FAAS,进一步拆解服务,可以理解为微服务的下一层。研发团队不需要关注任何和业务无关的(组件、环境、扩容、分流等等),只需要写自己的业务函数,其他交给FAAS服务来搞定。

而Web3的Decentralized,从某种程度上来看,抽象出业务行为,然后在任何可以提供FAAS的云服务运行自己的服务,也是一种阶段选择,因为不变的业务和具体业务实现代码,是非常容易迁移的。

当然,如果Web3不被法律认可,所有中心化服务拒绝Web3,那也是一种可能,但从发展和技术角度看,可能性不高。

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!

Between Web3 and Web2: SoulWallet's Backend Tech Stack--AWS Lambda