本文介绍了如何通过浏览器钱包的RPC端点将Vyper智能合约语言与Jupyter笔记本集成,简化合约的编写、调试和部署流程。文章提到使用浏览器内置的RPC连接替代传统配置,避免私钥泄露风险,并支持多链切换以确保交易在正确的链上执行。此外,还探讨了利用该技术实现透明化DAO治理的可能性。
在上一篇文章中,我解释了我们如何能够在浏览器插件中安装的加密钱包与Vyper智能合约编程语言之间引入连接。在titanoboa解释器中实现这一连接。如果你需要更多背景信息,可以查看那篇文章。
❤️ 我高兴地说,用户每天都在使用此功能将智能合约部署到许多不同的测试和生产链上!然而,用户仍然需要通过某个(通常是收费的)端点配置与网络的外部连接。例如:
import boa
from boa.network import NetworkEnv
from boa.integrations.jupyter import BrowserSigner
boa.set_env(NetworkEnv("<RPC 端点以及一些私钥>"))
boa.env.add_account(BrowserSigner())
嗯,这真糟糕。用户需要提供一个(秘密)URL,从不同包中导入 3 个东西,结果他们无法分享整个笔记本而不泄露他们的私钥。他们甚至不能分享截图而不打码 😠(就像上面的 Twitter 帖子)。
在本文中,我将解释我们如何使以下事项变得可能:
import boa
boa.set_browser_env() # 就这样 🤯
像Rabby和Metamask这样的浏览器钱包已经与区块链交互,而无需我们的插件。为了读取和更改区块链,它们需要与区块链建立连接,即一个 RPC(远程过程调用)端点。
所以用户问:为什么我们不直接使用它?确实,这就是我所实现的!在 boa 解释器中,我们只通过一个 URL 连接到网络。这个对 URL 的需求在系统中是扎根的——缓存层使用了一个私有接口。因此,在实现浏览器 RPC 之前,需要进行一次小重构。
一旦重构 PR 合并,通往调用我们 JavaScript 模块的道路就此打开——方式非常简单 😍
浏览器 RPC 简单地将每个调用重定向到我们的 JavaScript 插件。
现在,这一实现需要传递到环境中,如下所示:
import boa
from boa.network import NetworkEnv
from boa.integrations.jupyter import BrowserRPC
boa.set_env(NetworkEnv(BrowserRPC()))
就这样。我们可以在链上部署和调用合约。我们现在可以安全地分享这个笔记本,而不泄露任何凭证!
虽然上述实现有效,但每次 RPC 调用在浏览器窗口中生成了 10 像素的空白空间。这不是个大问题,但确实让人烦恼。
每个 Javascript 调用生成空行的问题。
不幸的是,Jupyter 在我们进行的每个 JavaScript 调用中生成了空的 HTML 元素。首先,我们将某些等待代码移动到前端,以避免过多的回调。
经过一些研究,上述问题已在try.vyperlang.org中通过一行CSS 规则解决。如果你想在自己的本地 Jupyter 安装中修复这个问题,还需要进行一些未来的工作。
你的钱包中可能有许多不同的主网和测试链。例如,如果你使用Rabby,所有以下主网都是可用的:
Rabby 支持的主链列表(来源)
虽然在自己的浏览器上切换链是可能的,但用户希望能够使用 boa 读取当前链并切换链。这样可以保证你正在向希望的链上应用交易。为此,创建了两个新方法:
def get_chain_id(self):
return _javascript_call(
"rpc", "eth_chainId", timeout_message=RPC_TIMEOUT_MESSAGE
)
def set_chain_id(self, chain_id):
_javascript_call(
"rpc",
"wallet_switchEthereumChain",
[{"chainId": chain_id}],
timeout_message=RPC_TIMEOUT_MESSAGE,
)
self._reset_fork()
因此,现在笔记本可以包含网络断言和/或切换,以确保交易在正确的链上执行 🚀
一个去中心化自治组织(DAO)需要一种分布式的管理方式;目前用户通过执行复杂的脚本进行投票,这容易出错且不透明。
正如在本文开头的推文中提到的——通过我们添加的功能,DAO 提案可以完全包含在一个笔记本中,从而使对组织提案的投票变得简单、安全和透明。
作为🍰的糖霜,我们在 boa 中添加了两个新帮助方法,这将使使用新功能变得更加简单:
import boa
# 这将简化 NetworkEnv 的使用
boa.set_network_env(url="...")
# 这将安装你的浏览器签名者(用于签署交易),
# BrowserEnv(用于切换链)和 BrowserRPC(用于网络调用)。
boa.set_browser_env()
观看视频: 使用你的浏览器钱包的网络与 Vyper
特别感谢Curve.fi、Fiddy Research和Charles Cooper的帮助,让我能够参与这个了不起的软件的开发并了解更多关于区块链的知识。
- 原文链接: medium.com/@daniel.schia...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,在这里修改,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!