安全智能账户
:warning: 此分支包含正在开发中的更改 要使用最新的经过审计的版本,请确保使用正确的提交。Safe 团队使用的标记版本可以在发布中找到。
使用方法
使用 npm 安装依赖:
npm i
测试
运行测试:
npm run build
npm run test
可选地,如果你想运行 ERC-4337 兼容性测试,它使用实时的打包器和节点,所以有一些先决条件:
- 定义环境变量:
ERC4337_TEST_BUNDLER_URL=
ERC4337_TEST_NODE_URL=
ERC4337_TEST_SINGLETON_ADDRESS=
ERC4337_TEST_SAFE_FACTORY_ADDRESS=
MNEMONIC=
- 为从助记词派生的执行器账户预先充值一些原生代币,以支付 ERC4337 模块的部署和测试操作所需的 Safe 预充资金。
部署
不同 Safe 合约部署及其地址的集合可以在 Safe 部署 仓库中找到。
要添加对新网络的支持,请按照"部署"部分的步骤操作,并在 Safe 部署 仓库中创建一个 PR。
部署
:warning: 部署合约时请确保使用正确的提交。 合约文件中的任何更改(甚至是注释)都会导致不同的地址。Safe 团队使用的标记版本可以在发布中找到。
当前版本: 最新发布版本是 v1.4.1-build.0,对应的提交是 192c7dc
这将确定性地部署合约,并使用默认的 Solidity 0.7.6 在 Etherscan 上验证合约。
准备工作:
- 在
.env
中设置MNEMONIC
- 在
.env
中设置INFURA_KEY
npm run deploy-all <network>
这将执行以下步骤
npm run build
npx hardhat --network <network> deploy
npx hardhat --network <network> sourcify
npx hardhat --network <network> etherscan-verify
npx hardhat --network <network> local-verify
自定义网络
可以使用 NODE_URL
环境变量通过 RPC 端点连接到任何基于 EVM 的网络。然后可以使用 custom
网络进行连接。
例如,要在该网络上部署 Safe 合约套件,你可以运行 npm run deploy-all custom
。
结果地址在所有网络上应该是相同的。
注意:如果合约代码发生变化或使用不同的 Solidity 版本,地址会有所不同。
重放保护(EIP-155)
某些网络需要重放保护,这与默认的部署过程不兼容,因为它依赖于没有重放保护的预签名交易(参见 https://github.com/Arachnid/deterministic-deployment-proxy)。
Safe 智能账户合约使用不同的确定性部署代理(https://github.com/safe-global/safe-singleton-factory)。为确保安装了此包的最新版本,请在部署前运行 npm i --save-dev @safe-global/safe-singleton-factory
。有关更多信息,包括将工厂部署到新网络,请参阅工厂仓库。
注意:这将导致与 hardhat 默认的确定性部署过程相比产生不同的地址。
验证合约
此命令将使用部署工件编译合约并将其与链上代码进行比较
npx hardhat --network <network> local-verify
此命令将合约源代码上传到 Etherscan
npx hardhat --network <network> etherscan-verify
文档
审计/形式化验证
- 版本 1.4.0/1.4.1 由 Ackee Blockchain 审计
- 版本 1.3.0 由 G0 Group 审计
- 版本 1.2.0 由 G0 Group 审计
- 版本 1.1.1 由 G0 Group 审计
- 版本 1.0.0 由 Runtime Verification 审计
- 版本 0.0.1 由 Alexey Akhunov 审计
安全性和责任
所有合约均不提供任何担保;甚至不提供对特定用途的适销性或适用性的暗示担保。
许可证
所有智能合约均以 LGPL-3.0 许可证发布