AnyWeb开发文档学习笔记
AnyWeb关键技术
1. Multi-Sig门限密钥分片技术

- 简介:通过多项式插值方式将密钥分为n份密钥共享,只有集齐超过k个密钥份额,才能够将密钥恢复。
- 功能:解决密钥的单点泄露风险,可变化的随机分片也能够持续更新多方持有的密钥共享,从而令黑客的前序攻击失效。
- 思考:可用于国内隐私保险库,企业区块链钱包账户,联盟内组织机构分管账户等方向。
2. 分布式私钥托管技术
- 简介:将若干份密钥共享托管在不同服务容器中的技术。
- 功能:和Multi-Sig门限密钥分片技术共同使用,构建分布式密钥共享服务容器集群,每个容器使用不同的服务组件技术栈和系统安全机制,增加黑客进行攻击的复杂度,降低被攻击成功的可能。
- 思考:配合监控单元探测功能可以提前检测到某一容器发生非法行为时,立即执行动态的密钥共享更新(即重置密钥),确保用户的私钥安全。
3.MPC多方安全计算技术

- 简介:如果使用完整的私钥进行区块链交易签名,AnyWeb会将多份分布式密钥在运行内存中短暂合成并用于签名,此时对于黑客而言是攻击的最佳时刻。
- 功能:解决一组互不信任的参与方之间在保护隐私信息以及没有可信第三方的前提下协同计算的问题,使得在任何时刻、任何位置均不会出现完整的私钥。
- 思考:和前两种技术一起结合使用使得安全机制更严谨,增加黑客的攻击成本。
4.WASM可信隔离沙盒技术

- 简介:在H5中上下级环境是不可信的,一些钓鱼网站会根据JavaScript上下文找到中间过程的密码学算法和运算结果,此时黑客就能根据分析进行攻击。
- 功能:对于经过处理的密码学算法,黑客难以通过逆向技术获取机密算法,同时也难以对 WASM 的内存数据进行直接分析,大幅提升 H5 端的机密运算安全和机密数据安全。
- 思考:可信隔离沙盒技术对AnyWeb钱包的作用就是可以不以浏览器插件的形式进行交互展示,采用沙盒技术用户无需安装浏览器插件就能在网页端之间使用,同时也保证了网页端的安全。
OAuth(开放权限)
1.获取权限
- 调用SDK的cfx_accounts方法获取用户权限
provider.request({
method: 'cfx_accounts',
params: [{
availableNetwork: [1, 1029],
scopes: ['baseInfo', 'identity'],
}]
}).then((result) => {
const {address, code, scopes} = result
console.log("用户地址", address, "OAuth Code", code, "Scope", scopes)
}).catch((e) => {
console.error('调用失败', e)
})
2.获取OAuth AccessToken(用户授权后的凭证,用于调用其他的OAuth API)
- DApp拿到权限的code(有效期5分钟)后,后端需要通过POST请求指定接口获取AccessToken
| 参数名 | 类型 | 备注 |
|---|
| appid | String | 从 open.anyweb.cc 拿到的 appid |
| secret | String | 从 open.anyweb.cc 拿到的 secret |
| code | String | 上一步获取的code |
{
"code": 1000,
"message": "success",
"data": {
"unionid": "fdf3db80-xxxx-xxxx-xxxx-e1060de07d80",
"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1hZjMyLWUxMDYwZGUwN2Q4MCIsImFwcGlkIjoiMWQxNDdjMDctNjM5Zi00YWI0LWFiNDktNzNkMWQ4OTkwOTk5IiwiaXNSZWZyZXNoIjpmYWxzZSwiaWF0IjoxNjXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.zKKYZcNTZ-PMSW6OgpIomai5IU1ehDYgxDw90RU8rRs",
"expire": 7200,
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXQtYWYzMi1lMTA2MGRlMDdkODAiLCJhcHBpZCI6IjFkMTQ3YzA3LTYzOWYtNGFiNC1hYjQ5LTczZDFkODk5MDk5OSIsImlzUmVmcmVzaCI6dHJ1ZSwiaWF0IjoxNjXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.fHm7xf9CWAXbN3rlJ83ExAC1aW9kmK-N6FyvyqcYumA",
"refreshExpire": 2592000,
"scope": "baseInfo,identity"
}
}
unionid:标识每个用户的一组字符串 id ,每个开发者下的所有 DApp 获取到同一用户的 unionid 相同,但不同开发者获取的不同。
- 可以看到已经拿到了accessToken,即用户授权证明,注意,拿到该token后,有效期只有两个小时,后续如果需要使用需要刷新accessToken。
3.用户信息获取
- 后端拿到accessToken后,调用获取用户信息接口即可获取用户具体信息
| 参数名 | 类型 | 是否必填 | 备注 |
|---|
| appid | String | 是 | 从 open.anyweb.cc 拿到的 appid |
| secret | String | 是 | 从 open.anyweb.cc 拿到的 secret |
| accessToken | String | 是 | accessToken |
| unionid | String | 是 | unionid |
| scopes | Array | 否 | 请求的数据范围,默认不填写或填写错误时,该字段为开放平台申请的全部权限。 |
-
1、请求参数中 scopes 如果为空则默认请求该 accessToken 所包含的所有权限。
-
2、baseInfo 为必须申请的权限,如果 scopes 不包含 baseInfo 会抛出错误。
-
3、本请求的 scopes 范围应当被包含在 cfx_accounts 传递的 scopes 范围内(即 DApp 向用户所询问授予的权限内),否则将抛出越权错误。
-
返回值
{
"code": 1000,
"message": "success",
"data": {
"unionid": "83c26fe9-7b48-4400-bfd0-224788e4e858",
"addressList": [
"cfxtest:aak6a2u06b2ww0v67xdej48rggvadfem0ecnzgapz4"
],
"network": 1,
"scopes": [
"baseInfo",
"identity"
],
"level": 0,
"phone": "12345678901"
}
}
SDK
1.AnyWeb JS SDK
| method | 说明 |
|---|
| cfx_accounts | 获取 Conflux 账户授权 |
| cfx_sendTransaction | 发起 Conflux 合约调用 |
| cfx_signTypedData | cfx_signTypedData |
| anyweb_importAccount | 将账户地址导入 AnyWeb 中 |
| anyweb_identify | 跳转到 AnyWeb 进行实名认证 |
| anyweb_revoke | anyweb_revoke |
| anyweb_logout | 退出登录 |
| anyweb_version | anyweb_version |
| anyweb_home | anyweb_home |
| anyweb_loginstate | anyweb_loginstate |
Service(无需用户授权的开发者能力接口)
1. ServiceToken
- ServiceToken是开放平台相关接口的调用凭证
| 参数名 | 类型 | 备注 |
|---|
| appid | String | 从 open.anyweb.cc 拿到的 appid |
| secret | String | 从 open.anyweb.cc 拿到的 secret |
| 参数名 | 类型 | 备注 |
|---|
| serviceToken | String | 换取到的 serviceToken |
| expiresIn | Number | serviceToken 有效时间 |
"code": 1000,
"message": "success",
"data": {
"serviceToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXQtYWI0OS03M2QxZDg5OTA5OTkiLCJkZXZlbG9wZXJJZCI6MzIsImlhdCI6MTY0XXXXXXXXXXXXXXXXXXXXXXXXXXX.4--P506OLFFZ-8YN9i1FnjdtmdHMHEsHn_E_XXXXXX",
"expiresIn": 7200
}
}
总结:
1.使用AnyWeb钱包如果要获取用户信息,需要先取到AccessToken才能调用用户信息接口,即实现钱包的权限机制,用这种机制保障了用户信息的安全,同时也能让用户体验Dapp服务。
2.ServiceToken主要担任凭证角色,类似于收据证明一样,可以用来记录合约接口的调用过程,增加业务流程的透明性。
3.在技术实现上,公有链的交易都需要Gas费用,AnyWeb钱包作为国内钱包的先例,在内置合约中提供了代付功能,开发者在开发应用的时候可以使用代付。这样用户在和智能合约交互的时候,就不需要使用数字货币,不需要下载交易所或者用法定货币兑换数字货币等复杂的操作。
4.AnyWeb钱包适用于中国国内形式,相比于国外用户,私钥和助记词的概念对国内用户不太熟悉,通过Conflux,国内用户也可以通过手机号和邮箱进行登录,参与到Web3的建设和开发中去。