与Moonbeam Safe多签钱包交互¶
概览¶
单签名钱包(简称singlesig)是一种只有一个所有者持有私钥的钱包,可以控制账户持有的所有资产。因此,如果私钥丢失将导致永久无法访问钱包并损失资金。
为解决此问题,多重签名钱包(简称multisig)应运而生。多重签名钱包需要至少有两个及以上的所有者持有私钥。如果其中一人失了私钥,其他人仍然可以访问钱包和资金。此外,多重签名钱包可能需要阈值签名,只有获得一定数量的授权,提案才能通过并执行交易。这为资产创建了一个额外的安全层。
为了帮助管理单签名钱包和多重签名钱包,Gnosis Safe被fork创建了Moonbeam Safe。Safe钱包可以配置为多重签名合约,允许两个或更多所有者持有资金并从Safe钱包转移资金。您还可以将Safe钱包配置为只有一个所有者的单签名合约。
本教程将引导您如何在Moonbase Alpha测试网上创建多重签名Safe钱包。您还将学习如何将DEV和ERC-20 Token发送至Safe钱包或从Safe钱包发送,以及如何使用Safe钱包与智能合约进行交互。本教程也适用于Moonbeam和Moonriver。
此处提供的信息仅供参考,由第三方提供。 Moonbeam文档网站(https://docs.moonbeam.network/)上列出和描述的任何项目与Moonbeam立场无关。
查看先决条件¶
首先,您需要准备几个资金充裕的MetaMask账户和一些准备发送至Safe钱包的ERC-20 Token,以及一个已部署的智能合约进行交互。
MetaMask账户¶
在本教程中,您将在Moonbase Alpha上创建一个Safe钱包与其交互并管理您的资金。要连接至Safe钱包,您需要执行以下操作:
- 安装MetaMask并连接至Moonbase Alpha
- 需要准备至少两个资金充裕的账户 您可以每24小时一次从Moonbase Alpha水龙头上获取DEV代币以在Moonbase Alpha上进行测试
您将需要至少两个帐户,因为您将设置一个具有3个所有者的多重签名Safe钱包,并且需要获得2/3的签名确认才能执行任何交易。因此,在本教程中,您需要在至少两个帐户之间来回切换才能确认和发送交易。
本教程将使用以下账户:
- Alice — 0xf24FF3a9CF04c71Dbc94D0b566f7A27B94566cac
- Bob — 0x3Cd0A705a2DC65e5b1E1205896BaA2be8A07c6e0
- Charlie — 0x798d4Ba9baf0064Ec19eB4F0a1a45785ae9D6DFc
ERC-20 Tokens¶
本教程的后半部分将引导您如何在Safe钱包发送和接收ERC-20 Token。因此,您需要部署一些ERC-20 Token并将其添加至您的MetaMask帐户中。您可以查看使用Remix部署至Moonbeam操作教程,特别是在Moonbeam上使用Remix部署合约和通过MetaMask与基于Moonbeam的ERC20进行交互两部分将向您展示如何部署ERC20 Token并将其导入MetaMask。
已部署的智能合约¶
本教程的最后部分将引导您如何使用Safe钱包与智能合约进行交互。所以您将需要一个已部署的智能合约与其交互。详细的操作指南可参考在Moonbeam上使用Remix部署合约。
您可以前往Remix并为以下SetText.sol
合约创建一个新文件:
pragma solidity ^0.8.0;
contract SetText {
string public text;
function setTextData(string calldata _text) public {
text = _text;
}
}
这是一个带有单个函数setTextData
的简单合约,接受一个字符串并使用它来设置text
变量。
您将需要合约地址和ABI,请确保您已将它们复制或保存到其他地方,以备不时之需。
创建一个Safe钱包¶
要创建一个Safe钱包,导航至Moonbeam Safe。本教程将引导您在Moonbase Alpha上创建一个Safe钱包,您也可以修改配置在Moonbeam或Moonriver上创建一个Safe钱包。您可点击页面右上角的网络下拉菜单切换网络。
连接MetaMask¶
进入Moonbase Alpha页面后,开始创建Safe钱包之前先连接您的钱包:
-
点击Connect Wallet
-
选择钱包连接至Moonbeam Safe。本示例中您可以使用MetaMask。如果MetaMask没有出现在选项列表中,点击Show More并选择MetaMask
如果您还没有登录MetaMask,系统将会提示您登录。随后,将引导您添加和连接您的帐户,以及添加和切换至Moonbase Alpha网络:
-
选择账户并连接至Safe钱包。您将需要选择至少3个所有者账户中的其中两个,然后点击Next。本示例中,将选择Alice、Bob和Charlie账户。
-
点击Connect连接至已选账户
-
如果您还没有连接至Moonbase Alpha,或者您还没有在您的MetaMask添加Moonbase Alpha网络,点击Approve将Moonbase Alpha添加为自定义网络
-
点击Switch Network将网络切换至Moonbase Alpha
现在,您可以在右上方确认您的MetaMask账户已连接至Moonbase Alpha网络。如果您使用的是开发账户,您应该可以看到Alice的账户地址。如果不是,请再次确认您的MetaMask并切换到Alice账户。
创建新的Safe钱包¶
点击Create new Safe,在Moonbase Alpha上创建一个新的Safe钱包。页面将出现一个向导,引导您完成创建新的Safe钱包。完成这些步骤并创建新的Safe钱包,即表示您同意使用条款和隐私政策。因此,在开始之前,请仔细查看这些内容。
您将需要给您的Safe钱包设置名称:
-
输入您的新Safe钱包名称,您可以使用
moonbeam-tutorial
-
点击Start
接下来是所有者和签名确认部分。在这个部分中,您将添加Safe钱包的所有者并设置阈值。阈值决定了在交易执行之前需要多少位所有者来签名确认。
创建Safe钱包的时候可以使用许多不同的设置。Safe钱包可以有1个或多个所有者以及不同的阈值级别。请注意,不建议创建只有1个所有者的Safe钱包,因为它会产生单点故障的可能性。
在本教程中,您将创建一个具有3个所有者并要求阈值为2的多重签名设置,因此至少需要3个所有者中的2人使用私钥签署才能通过Safe钱包执行交易。
您的帐户将自动预先填写为第一个所有者,但如果您想使用不同的帐户,则可以更改此设置。在本示例中,Alice的帐户已预先填写。除了Alice之外,您还可以添加Bob和Charlie作为所有者:
-
点击Add another owner
-
输入Bob作为第二个所有者,以及他的地址:
0x3Cd0A705a2DC65e5b1E1205896BaA2be8A07c6e0
-
输入Charlie作为第三个所有者,以及他的地址:
0x798d4Ba9baf0064Ec19eB4F0a1a45785ae9D6DFc
-
设置3个所有者的确认阈值为2
-
点击Review进入向导的最后步骤
最后,您可以查看所有Safe钱包和所有者的详细信息,确认信息无误后:
-
点击Submit创建新的Safe钱包。这将在Moonbase Alpha上产生约少于0.001 DEV的手续费。MetaMask将会跳出弹窗提示您确认签署交易。
-
点击Confirm发送交易并创建Safe钱包
处理交易和创建Safe钱包可能需要几分钟时间。创建成功后,您将会看到一条消息,提示“Your Safe was created successfully”。然后,您可以点击Get Started加载您的Safe钱包并开始交互。
配置Safe钱包¶
您可以随时管理您的Safe钱包并在创建时更改一些参数设置。为此,您可以点击左侧菜单上的Settings选项。
随后,您将会看到以下选项:
- Safe Details — 允许您更改Safe钱包名称。这是一个无需链上交互的本地操作
- Owners — 允许您发起一个链上提案,从Safe钱包增加/移除所有者
- Policies — 允许您发起一个链上提案,更改多重签名阈值以执行交易
- Advanced — 允许您从Safe钱包查看其他参数,如自定义交易nonce、模块和事物卫士(Transaction Guard)
接收和发送Token¶
接收Token¶
现在,您已经创建了您的Safe钱包,可以开始进行交互。首先,通过发送一些DEV Token来加载Safe。您可以从任何拥有DEV Token的账户发送至Safe钱包。在本示例中,您可以使用Alice账户。将鼠标移至资产列表的DEV上,显示Send和Receive按钮后,点击Receive。
随后将会跳出弹窗,显示Safe钱包的地址。点击地址右侧的复制图标以复制地址,然后点击Done。
接下来,打开您的MetaMask以发起交易:
-
点击Send发送交易
-
将Safe钱包的地址粘贴至输入框内
-
输入您将要发送至Safe钱包的DEV Token数量。在本示例中,您可以设置为2个DEV Token
-
点击Next
-
查看交易详情,点击Confirm
交易已经发送,您的DEV Token余额也会更新在Safe钱包。
发送Token¶
现在,您的Safe钱包已经有资金,您可以将资产从Safe钱包发送至另一个账户。在本示例中,您可以发送1个DEV Token至Bob的地址。将鼠标移至资产列表的DEV上,点击Send。
随后将会跳出弹窗,您需输入接收人和需要发送的DEV Token数量:
-
输入Bob的地址
-
在资产列表选择DEV
-
在DEV Token数量处输入1
-
点击Review
然后查看详细信息,点击Submit。MetaMask将跳出弹窗,您将看到您发送的不是交易而是消息。点击Sign签名消息。
现在,如果您返回Safe钱包,在Transactions标签下,您应该能够看得到已经发起的向Bob的地址发送1个DEV Token的交易提案。但是,您可以看到只收到2个确认中的其中一个,还需要另一个所有者确认才可执行交易。
交易确认¶
对于多重签名钱包Safe的所有用例,确认(或拒绝)交易提案的过程是相似的。其中一位所有者发起执行操作的提案。其他所有者可以批准或拒绝该提案。一旦达到签名阈值,任何所有者都可以在批准的情况下执行交易提案,如果拒绝则交易提案不通过。
在本示例中,如果三个所有者中的其中两个决定拒绝该提案,则资产将被保留在Safe钱包。在这种情况下,您可以从Bob的账户或者Charlie的账户确认交易。
在MetaMask切换账户至Bob的账户(或Charlie的账户)。然后返回以Bob的账户连接的Safe钱包。现在Confirm的按钮应该已经启用。Bob需要继续下一步操作,点击Confirm 以满足阈值并发送交易。随后将会跳出弹窗,要求您批准交易:
-
勾选Execute transaction框以在确认后立即执行交易。您也可以取消勾选在后续手动执行交易
-
点击Submit
-
MetaMask将跳出弹窗,要求您确认交易。确认信息无误后,点击Confirm
注意事项
如果您收到交易可能失败的错误消息,您可能需要增加gas限制。您可以在Advanced options或MetaMask中执行此操作。
交易将从QUEUE标签移除,但是可以在HISTORY标签下找到交易记录。此外,Bob的余额现在增加了1个DEV Token,而Safe钱包的DEV Token余额减少了。
这样就意味着您已经成功在Safe钱包接收和发送DEV Token了!
接收和发送ERC-20 Token¶
接收ERC-20 Token¶
接下来就是在Safe钱包接收和发送ERC-20 Token。您需要确保您的MetaMask已经有充足的MYTOK ERC-20 Token。如果还没有,请返回查看先决条件,参考ERC-20 Tokens部分。
本示例中,您应该仍然连接着Bob的账户。因此,您将从Bob的账户发送MYTOK Token至Safe钱包。
您需要再次获取Safe钱包地址。您可以点击左上角Copy to clipboard图标来复制地址。随后,打开MetaMask:
-
切换至Assets标签,在列表中选择MYTOK
-
点击Send
-
在输入框内粘贴Safe钱包地址
-
输入需要发送的MYTOK数量。您应该已经跟随使用Remix部署至Moonbeam操作教程铸造了8,000,000个MYTOK。所以在本示例中,您可以发送数量一栏输入1,000 MYTOK
-
点击Next
-
查看交易详情,然后点击Confirm发送交易
如果您返回至Safe钱包,在Assets列表中您应该可以看到MyToken的余额已经显示为1,000 MYTOK。MyToken可能需要几分钟才能出现,您无需执行任何添加资产的操作,它会自动出现。
发送ERC-20 Token¶
现在,您的Safe钱包已经有MYTOK,您可以将一些MYTOK从Safe钱包发送至另一个账户。在本示例中,您可以发送10个MYTOK至Charlie的账户。
将鼠标移至资产列表的MyToken上,点击Send。
随后将会跳出弹窗,您需输入接收人和需要发送的MYTOK Token数量:
-
输入Charlie的地址
-
在资产列表选择MyToken
-
在MYTOK Token数量处输入10
-
点击Review并查看详情
确认信息无误后,请执行以下操作:
-
点击Submit。MetaMask将跳出弹窗,您将看到您发送的不是交易而是消息。
-
点击Sign签名消息。
现在,如果您返回Safe钱包,在Transactions标签下,您应该能够看得到已经发起的向Charlie的地址发送10个MYTOK Token的交易提案。但是,您可以看到只收到2个确认中的其中一个,还需要另一个所有者确认才可执行交易。
您需要将账号切换至Alice或者Charlie,确认交易并执行。您可遵循上面交易确认部分的步骤进行操作。
当另外两个账户的其中一个账户确认交易后,交易将被移到HISTORY标签。
这样就意味着您已经成功在Safe钱包接收和发送ERC-20 Token了!
与智能合约交互¶
在这一部分,您将使用Safe钱包与智能合约交互。您应该已经使用Remix部署了SetText.sol
合约。如果还没有,请返回查看先决条件,参考已部署的智能合约部分。
在这一部分的教程中,您仍然需要连接至Alice的账户
在Safe钱包中,您需要执行以下操作:
-
点击左侧的New Transaction
-
然后,选择Contract interaction
随后将会跳出Contract interaction的弹窗,您需要填写智能合约详细内容:
-
在Contract address字段输入智能合约地址
-
在ABI内容框内粘贴ABI
-
在出现的的Method下拉菜单中选择
setTextData
函数 -
然后会出现
_text
输入字段。您可以输入任何内容,在本示例中为polkadots and moonbeams
-
点击Review
确认信息无误后,请执行以下操作:
-
Click Submit. MetaMask will pop-up and you'll notice that instead of sending a transaction, you're sending a message
点击Submit。MetaMask将跳出弹窗,您将看到您发送的不是交易而是消息
-
Click Sign to sign the message
点击Sign签署消息
现在,如果您返回Safe钱包,在Transactions标签下,您应该能够看得到为Contract interaction发起的交易提案。但是,您可以看到只收到2个确认中的其中一个,还需要另一个所有者确认才可执行交易。
您需要将账号切换至Bob或者Charlie,确认交易并执行。您可遵循上面交易确认部分的步骤进行操作。
当另外两个账户的其中一个账户确认交易后,交易将被移到HISTORY标签。
请仔细检查设置的文本内容无误。您可以通过再次执行该过程进行确认,除了从Method下拉菜单中选择setTextData以外,您可以选择text来读取text
值。这将是一个调用(call)而不是一个交易,因此会出现一个Call按钮。点击后,将会直接出现一个弹窗,您应该会看到调用的结果polkadots and Moonbeams
。
这样就意味着您已经成功使用Safe钱包与智能合约交互了!
使用Moonbeam Safe API¶
Moonbeam、Moonriver和Moonbase Alpha也支持用API来与Moonbeam Safe进行交互。
https://transaction.multisig.moonbeam.network/
https://transaction.moonriver.multisig.moonbeam.network/
https://transaction.moonbase.multisig.moonbeam.network/
作为使用API的示例,请尝试从Moonbeam Safe API检索有关多签钱包的信息。从Safe页面,复制您的多签地址:
然后您可以开始使用API:
- 打开对应网络的API页面
- 向下滚动到 Safes 部分并单击 /safes/{address}/ 端点部分以展开其页面
- 点击右侧的Try it out按钮
页面中应出现一个Execute按钮:
- 将您的保险箱地址粘贴到Address输入栏
- 点击Execute
- 有关您的保险箱的信息将显示在下方
恭喜!您已成功使用API for Moonbeam Safes。为了方便或添加到您自己的应用程序中,仍有许多其他端点可供使用。
Created: November 3, 2021