Anchor协议
扫码登录
dapp
生成一个
uuid作为房间号(WSS地址例如:wss://fwd.aplink.app/f7693a09-e038-4c9e-8583-f70638cd67cc),放在二维码信息里,然后aplink可以通过二维码获取到。aplink登录签名信息会通过此房间号把签名信息返回给dapp,完成登录。
二维码信息如下:
{
"chain_id": [
"chain_id",
"208DACAB3CD2E181C86841613CF05D9C60786C677E4CE86B266D0A58884968F7"
],
"req": [
"identity",
{
"scope": "anchor.link.d",
"permission": null
}
],
"flags": 2,
// 登录成功信息会通过 wss://fwd.aplink.app/aa2f1738-bc3e-4b61-9e14-1e31f84b6f44(注意是wss协议)返回
"callback": " https://fwd.aplink.app/aa2f1738-bc3e-4b61-9e14-1e31f84b6f44",
"info": [
{
"key": "link",
"value": "09E074115CDAD0340002A0EF7AE67D27AEBC094EF5FACC04B0FAF52BE88EE3B5B846E4D2483B0F7536D500"
},
{
"key": "scope",
"value": "616E63686F722D6C696E6B2D64656D6F"
},
{
"key": "dapp",
"value": "5B224E46544F6E65222C22687474703A2F2F3139322E3136382E35302E38353A383038302F66617669636F6E2E706E673F3334363334336338366361643631353565323462222C22687474703A2F2F3139322E3136382E35302E38353A383038302F64657461696C2F75736572312F313030303030322F3230303730225D"
}
]
}aplink
通过扫码获上到上面信息,然后生成
登录交易信息去签名。放在sig里aplink 会随机生成钱包地址,作为sessionID,以便查找。放在
link_key里aplink 也会随机生成一个
uuid,后面通信通道。这个通信方式不是wss协议,而是https协议。放在link_ch里返回给dapp的数据如下:
sig的签名内容如下:(仿制的交易,并不会广播。只做签名)aplink会生成下面信息去签名。dapp会也生成下面信息去验证签名。
发起交易
dapp
再次随机生成一个
uuid,用来接收交易返回信息,也可能是错误处理信息。发起
https请求,把esr信息(包含uuid)发给aplink。https请求的地址就是上面的link_ch,这是个固定通道。aplink也会用这个通道接收信息。esr信息如下:
aplink
接收上面
esr信息,解析生成交易,并签名。然后通过https请求带过来的callback通道把签名与其它信息发送给dapp。发送的信息如下
link_ch与link_key只要session没有重链,是不会变的。
侦听退出登录
这是后面开发的一个功能,如果实现?
用sessionId即上面的link_key创建一个通道。然后aplink与dapp都侦听这个通道,如果aplink主动退出,则发出APPREMOVESESSION信息。如果dapp主动退出,则发出REMOVESESSION信息。两边相互接收对方信息,接收到就会触发退出登录操作。
对于dapp只需增加对aplink的侦听:
注意:事件是在session对象上,非link对象
总结
每次交易都会用不同的
uuid通信,这也是为了安全考虑,防止信息被侦听窃取。这是记住session方式,还有一种方式是每次都要扫码,但没开启。
dapp发起请求是通过
https发送到https://fwd.aplink.app服务器,然后由服务器再通过wss发送信息到aplink。aplink通过侦听wss获取信息并处理。通信息服务器
https://fwd.aplink.app由dapp确定。但必需要有相应功能。
最后更新于