该提案定义了与 EIP-5792 的 wallet_sendCalls 互补的 JSON-RPC 方法。
本提案定义了对 EIP-5792 的 wallet_sendCalls
方法的补充 JSON-RPC 方法。虽然 wallet_sendCalls
用于应用提交 calls
,以便在钱包的界面中签名和提交,但本提案中的方法用于应用程序请求准备好的 calls(其中“准备好的”取决于钱包实现),以便由应用程序本身签名和提交。
随着账户抽象和会话密钥的最新发展,应用程序越来越需要能够在不切换到钱包界面(例如,浏览器扩展程序)的情况下签名和提交操作。这可能很棘手,因为不同的账户实现可能具有不同的调用数据编码、签名格式等。为了解决这个问题,我们需要一种方法让应用程序知道如何为任何账户实现提交操作。
定义了两个新的 JSON-RPC 方法。如果用户正在浏览器上与应用程序交互,则可以通过将请求发送到钱包的 EIP-1193 provider 来使用它们。但是,本提案还描述了应用程序如何与“钱包服务器”交互以进行后台进程。
wallet_prepareCalls
接受 EIP-5792 wallet_sendCalls
请求,并根据账户的实现返回准备好的 calls。
type PrepareCallsParams = [{
version: string
from: `0x${string}`
chainId: `0x${string}`
calls: {
to: `0x${string}`
data: `0x${string}`
value: `0x${string}`
}[];
capabilities: Record<string, any>
}]
wallet_prepareCalls([{
version: '1.0',
from: '0x...',
chainId: '0x...',
calls: [{
to: '0x...'
data: '0x...'
value: '0x...'
}],
capabilities: {
paymasterService: {
url: 'https://...'
}
}
}])
type PrepareCallsReturnValue = {
type: string
chainId: `0x${string}`
signatureRequest: {
hash: `0x${string}`
}
capabilities: Record<string, any>
}
##### 返回值示例
```typescript!
{
type: 'user-operation-v06',
userOp: {
sender: '0x...',
...
},
chainId: '0x01',
signatureRequest: {
hash: '0x...'
}
capabilities: {
paymasterService: {
sponsor: 'My app'
}
}
}
调用 wallet_prepareCalls
后,应用程序开发人员应使用 signatureRequest
字段中提供的哈希进行签名,并将准备好并签名的 calls 通过第二个 RPC 方法 wallet_sendPreparedCalls
返回给钱包(通过其 EIP-1193 provider 或其服务器对应方)。
wallet_sendPreparedCalls
接受来自 wallet_prepareCalls
请求的响应中的准备好的 calls 以及签名,并返回 EIP-5792 call bundle ID。
type SendPreparedCallsParams = [{
version: string
type: string
data: any
chainId: `0x${string}`
signature: {
type: string
signature: `0x${string}`
}
}]
wallet_sendPreparedCalls([{
version: '1.0',
type: 'user-operation-v06',
data: {
sender: '0x...',
...
},
chainId: '0x01',
signature: {
type: 'secp256k1',
data: '0x...'
}
}])
type SendPreparedCallsReturnValue = {
preparedCallIds: string[]
}
['0x...']
wallet_sendPreparedCalls
RPC 使用 EIP-5792 call bundle 标识符进行响应,因此已经使用 wallet_sendCalls
向钱包提交 calls 的应用程序可以继续使用 wallet_getCallsStatus
来获取提交的 calls 的状态。
许多会话密钥用例涉及代表用户提交操作。一个例子是自动执行用户 DEX 交易的应用程序。在这些情况下,钱包可以为应用程序提供一个“钱包服务器”URL,以便在浏览器上下文之外提交 JSON-RPC 请求。
定义一个声明公共钱包服务器 URL 的 walletServer
EIP-5792 capability 不在本 EIP 的范围内。
{
"0x2105": {
"walletServer": {
"supported": true,
"url": "https://.../0x2105"
}
},
"0x14A34": {
"walletServer": {
"supported": true,
"url": "https://.../0x14A34"
}
}
}
如果钱包的 EIP-1193 provider 收到这些请求,它可能会选择将请求重新路由到自己的钱包服务器。或者,EIP-1193 provider 可以直接处理请求。
待定
需要讨论。
在 CC0 下放弃版权和相关权利。
- 原文链接: github.com/ethereum/ERCs...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!