解锁Verify API的强大功能:钱包分步指南
WalletConnect的Verify API是一项易于实施的安全功能,能让您的钱包帮助用户获得更安全的web3体验。在本指南中,我将带您逐步了解如何集成Verify API,让您清楚直观地了解如何更有效地区分请求。
什么是Verify API?
Verify API是一项以安全为中心的功能,当用户可能连接到可疑或恶意域名时,允许钱包通知最终用户,有助于防止整个行业的网络钓鱼攻击。通过将WalletConnect的域名注册表与Blowfish和BlockAid等行业领先的安全工具结合,Verify API使钱包能够支持用户检测潜在有害连接。
Verify安全系统在四种不同情况下区分会话请求:
- 域名匹配:与此请求关联的域名已被验证为此应用程序的域名
- 未验证:发送请求的域名无法验证
- 不匹配:应用程序的域名与此请求的发送者不匹配
- 威胁:此域名被标记为恶意且可能有害
此外,通过verifyContext暴露isScam字段,基本上澄清了域名是否被检测为威胁。
实施方法
要实现Verify API,我们可以采用三种特定平台的路径。
JavaScript (Web/React Native)
在utils文件夹中创建新文件utils/verify.ts(如果使用JavaScript则使用.js):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
// utils/verify.js
import { Verify } from '@walletconnect/types'
export function getVerifyStatus(context?: Verify.Context) {
if (!context) return ''
switch (context.verified.validation) {
case 'VALID':
return '✅'
case 'INVALID':
return '❌'
case 'UNKNOWN':
return '❓'
default:
return ''
}
}
|
这里我们创建了一个switch语句来检查每个可能的Verify响应,并根据状态返回自定义消息。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
// 已验证域名的自定义标签
const VerfiedTag = (): React.FC => {
return (
<div className="flex items-center gap-2">
<CheckIcon />
<span>Verified Domain</span>
</div>
);
};
...
// 在getVerifyStatus函数内部
case 'VALID':
return <VerfiedTag/>
...
|
现在,在我们处理来自Web3Wallet的其他请求的地方导入此函数:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
// authentication.js
import { getVerifyStatus } from '@/utils/verify'
...
web3wallet.on("auth_request", async (authRequest) => {
const { id, params, verifyContext } = authRequest
const validation = getVerifyStatus(verifyContext)
const isScam = verifyContext.verified.isScam // 如果域名被标记为恶意,则为true
// 如果域名被标记为恶意,您应该警告用户,因为他们可能会损失资金
if(isScam) {
// 向用户显示警告屏幕
// 仅当用户接受风险时才继续
}
// 1. 提示用户批准认证请求
...
<p>{validation}</p>
...
// 2. 响应认证请求
await web3wallet.respondAuthRequest(...)
})
|
iOS (Swift)
在Swift中,我们可以使用VerifyContext中的验证枚举来检查请求的真实性:
1
2
3
4
5
6
7
8
9
10
|
public struct VerifyContext: Equatable, Hashable {
public enum ValidationStatus {
case unknown
case valid
case invalid
}
public let origin: String?
public let validation: ValidationStatus
public let verifyUrl: String
}
|
Android (Kotlin)
与iOS类似,Wallet.Event.VerifyContext提供有关SessionProposal、SessionRequest和AuthRequest的域名验证信息:
1
2
3
4
5
6
7
8
9
10
|
data class VerifyContext(
val id: Long,
val origin: String,
val validation: Model.Validation,
val verifyUrl: String
)
enum class Validation {
VALID, INVALID, UNKNOWN
}
|
最终结果
虽然整体实现可能有所不同,但完成后应该类似于下面的视觉效果。
这个示例让您很好地了解了如何使用JavaScript进行集成。最棒的是,您可以根据需要自定义它以适合您的钱包主题。
资源/示例
- Verify API文档
- Verify API实现(使用Web3Wallet JavaScript)
- 实时示例
- 演示恶意应用程序(用于测试被标记为恶意的应用程序的威胁屏幕)
为钱包用户迈向更安全的未来!
如您所见,集成WalletConnect的Verify API相当简单,但对用户体验的影响却是显著的。
此外,Verify API的四级安全系统——根据发送者的真实性将会话请求分类为无效、未知、有效和威胁——使您能够自定义在用户连接应用程序或签署交易时向他们提供的提示和消息。这使您能够灵活地塑造用户体验。
Verify API是在使web3更加安全的道路上迈出的一大步。作为钱包,您可以通过向用户提供保护自己所需的信息,为他们带来重大改变。正如我们在这个行业中所说:不要信任,要验证。
有了Verify API,我们现在可以做到!