前段时间,Matataki 开放了自己的 API 文档,虽然这份文档看起来还很不完善[1],不过不妨害先实现一些 简单的应用场景。根据 Joel Monegro 的理论:Information Capital is more valuable when distributed[2],不妨我们先实现空投。
通过本文,你可以了解到:
目前的前端 👉 GitHub Repo 和后端 👉 GitHub Repo
Demo:
这些 API 是 Matataki 官方给第三方开发者开放的,你可以通过 API 进行 Fan票的操作(查询、转账等),作为一个需要用户使用的 Dapp,你需要有用户的 accessToken
。目前 Matataki 给第三方 App 提供的只有通过邮箱、密码登录来获得 accessToken
。
以前端常用的请求库 axios 配合 React 为例,来举例:
然后你就可以利用这个 client
去写函数了,以和用户模组为例
这里加可选的话,更像是一个 general 的 dapp 开发指南。这篇我们只要介绍 airdroper 本身感觉就好。
xiaodao
如果你要做一些更高级的功能,可能 Matataki 现有的 API 不能满足仅在前端开发的需求。这时候就需要你自己去搭建一个后端。这里以 Nest.js + TypeScript 为例。
使用 Nest CLI 创建 Nest 项目非常简单. 只需要有 npm 就可以执行以下命令:
npm i -g @nestjs/cli
nest new project-name
后续就是配置你的后端了,这里不再过多赘述,详细可以查阅 Nest 的文档(英文) 或 Nest 的文档(中文) 。
我们 AirDropper 是一个代币空投的工具,如果使用用户的账户来进行操作存在安全风险。所以我们还得去 Matataki 注册一个账户,给我们的后端使用。
在项目保存私密数据的最佳实践是你把敏感的内容放进环境变量里。node 一般都使用 dotenv
作为文件 =输入=> 环境变量的最佳工具。
# 空投中转账号
TEMP_ACCOUNT=just_airdrop@foo.bar
TEMP_PASSWORD=foooobbbbbaaaarrrrr
TEMP_UID=114514
这样我们的后端可以从 process.env.[环境变量]
来读取到敏感的数据。
首先用用户的 accessToken
来转账到我们的临时账户,然后再去 DB 创建对象。
// @todo, 争取先让后端也 deploy 上公网,后续再做这个
NaoMiku
感谢Matataki 团队的 小岛、@zxplus @Neko 和 @Frank 对AirDrop项目的支持
↩︎⚠️警告⚠️
与其他成熟的平台不同,你通过 API 获取的用户accessToken
目前是和 Matataki.io 上的用户服务令牌是一样的。获取到用户accessToken
即意味着你是在以用户本人的名义作出 API 操作!
个人看法是,Matataki 如果真的要做 Dapp,OAuth 和权限控制是必须要做的
OAuth in one picture
NaoMiku
or
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up
Syntax | Example | Reference | |
---|---|---|---|
# Header | Header | 基本排版 | |
- Unordered List |
|
||
1. Ordered List |
|
||
- [ ] Todo List |
|
||
> Blockquote | Blockquote |
||
**Bold font** | Bold font | ||
*Italics font* | Italics font | ||
~~Strikethrough~~ | |||
19^th^ | 19th | ||
H~2~O | H2O | ||
++Inserted text++ | Inserted text | ||
==Marked text== | Marked text | ||
[link text](https:// "title") | Link | ||
 | Image | ||
`Code` | Code |
在筆記中貼入程式碼 | |
```javascript var i = 0; ``` |
|
||
:smile: | ![]() |
Emoji list | |
{%youtube youtube_id %} | Externals | ||
$L^aT_eX$ | LaTeX | ||
:::info This is a alert area. ::: |
This is a alert area. |
On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?
Please give us some advice and help us improve HackMD.
Syncing