本文介绍了以太坊在扩展性方面的创新,特别是如何利用MetaMask的signTypedData
方法构建状态通道。文章详细阐述了该方法的背景、优势,并提供了具体的JavaScript代码实例,展示了如何进行用户签名和验证,适合开发者学习和应用。
请注意:这是一个非常早期的功能,具体实现可能会有所改变!如果将来 API 发生变化,请不要将此方法用于你无法更新的生产应用程序!
以太坊计划采用多种方式进行扩展,且这是区块链爱好者广泛关注的话题,因为区块链的可扩展性是其实用性的重要技术限制。
你现在可以开始扩展你在以太坊上的应用程序,而无需等待任何其他技术可用的方法之一,就是构建机制,允许用户签署状态更改,这些更改并不总是提交到区块链,但在需要时可以提交,比如 状态通道。要创建一个可用的状态通道,利用 MetaMask 新的 signTypedData
方法是最简单的选择。
该方法最初由 0x 的 Leonid Logvinov 提出,并由 Machimony 的 Sergey Ukustov 为 MetaMask 实现。这个新方法使得创建涉及用户签名的应用程序变得比以往更加简单:
在本文中,你将学习展示给 MetaMask 用户如下内容:
结构化数据用户提示在链上计算成本低?不可能!
API 是简单的,一旦在新的 EthJS 和 Web3.js 版本中部署,将变得更加简单。与此同时,使用它将让你接触到 MetaMask 提供给你的最低级别 API:以太坊提供者。
你可以在 github 上在线找到此代码:这里。
// 一个用于恢复签名的 JS 库:
const sigUtil = require('eth-sig-util')const msgParams = [\
{\
type: 'string', // 任何有效的 solidity 类型\
name: 'Message', // 任何你想要的字符串标签\
value: 'Hi, Alice!' // 要签名的值\
},\
{\
type: 'uint32',\
name: '一个数字',\
value: '1337'\
}\
] // 获取当前账户:web3.eth.getAccounts(function (err, accounts) { if (!accounts) return signMsg(msgParams, accounts[0])})function signMsg(msgParams, from) { web3.currentProvider.sendAsync({
method: 'eth_signTypedData',
params: [msgParams, from],
from: from,
}, function (err, result) { if (err) return console.error(err)
if (result.error) {
return console.error(result.error.message)
} const recovered = sigUtil.recoverTypedSignature({
data: msgParams,
sig: result.result
}) if (recovered === from ) {
alert('恢复的签名者: ' + from)
} else {
alert('验证签名者失败,得到: ' + result)
}
})
}
如你所见,在这里我们:
eth-sig-util
。你不仅可以使用 JavaScript 验证此数据,还可以在 Solidity 中进行验证。以下是 在 Solidity 中验证这些签名的示例。这是编写关闭状态通道代码时可能会有用。
我希望这对你有所帮助,如有任何问题,请告诉我们,如果你创建了任何想要分享的示例,也请告诉我们!
- 原文链接: medium.com/metamask/scal...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!