背景
智能合约在 Web3 繁荣的生态中占据了重要地位,在部署智能合约时,常见的方式为在服务器生产环境或者开发者工作电脑中,通过私钥部署合约。这种方式虽然简单易实施,但也暴露了显著的私钥单点风险问题,一旦私钥丢失或者被盗用,后果不堪设想。
常见的智能合约开发框架,如 Hardhat 和 Truffle Suite 等,使得智能合约的开发、测试和部署更加简单便捷,但是这些框架默认都需要把私钥放在配置文件或者环境变量中,使用私钥进行合约部署,存在单私钥的单点风险问题。为了加强合约部署的安全性,Safeheron 借助于 Hardhat 和 Truffle Suite 的插件扩展能力,推出了 Hardhat-Safeheron 和 Truffle-Safeheron 插件,实现了通过 Safeheron MPC 钱包安全高效地部署智能合约的能力,并且可以搭配策略引擎自定义合约部署的审批流程,不仅解决了私钥管理的单点风险问题,而且加强了智能合约部署的流程管控。
Safeheron 秉持着区块链世界的开源精神,在 GitHub 仓库开源了插件相关代码。接下来,本文将详细介绍这两个插件的具体使用方式。在开始使用插件之前,请确保您已经开通了 Safeheron Open API (https://docs.safeheron.com/api/zh.html) 服务。
了解插件
Hardhat
https://github.com/Safeheron/hardhat-safeheron
Truffle
https://github.com/Safeheron/truffle-safeheron
使用 Hardhat-Safeheron 插件
安装 Hardhat
如果您已经安装过 Hardhat 或者对 Hardhat 比较熟悉,可以跳过这个部分。
在项目中安装 Hardhat。
npm install --save-dev hardhat
使用 Hardhat 默认的模板初始化一个新的 Hardhat 项目。
npx hardhat init
当您执行完上述命令后,在控制台会出现以下消息:
npx hardhat init
888 888 888 888 888
888 888 888 888 888
888 888 888 888 888
8888888888 8888b. 888d888 .d88888 88888b. 8888b. 888888
888 888 "88b 888P" d88" 888 888 "88b "88b 888
888 888 .d888888 888 888 888 888 888 .d888888 888
888 888 888 888 888 Y88b 888 888 888 888 888 Y88b.
888 888 "Y888888 888 "Y88888 888 888 "Y888888 "Y888
👷 Welcome to Hardhat v2.22.3 👷
? What do you want to do? …
❯ Create a JavaScript project
Create a TypeScript project
Create a TypeScript project (with Viem)
Create an empty hardhat.config.js
Quit
接下来,
STEP
1
选择 Create a JavaScript project 并点击确认。
STEP
2
选择当前文件夹作为您的项目路径。
STEP
3
通过 npm 安装必要依赖。
然后,您就可以开始您的 Hardhat 新项目了。
连接 Safeheron
通过使用 Safeheron Hardhat Plugin (https://www.npmjs.com/package/@safeheron/hardhat-safeheron),您可以明确指定并连接到某个 Safeheron Web3 钱包,并使用它部署智能合约。依托 Safeheron 钱包背后的 MPC-TSS 技术和审批策略,有效规避私钥单点风险和加强合约部署流程管控。
安装插件。
npm install @safeheron/hardhat-safeheron
在项目根目录的 hardhat.config.js 或 hardhat.config.ts 中引入插件,并修改相关配置。
import "@safeheron/hardhat-safeheron";
const safeheronConfig = {
baseUrl: '<https://api.safeheron.vip>',
apiKey: '<your open api key>',
rsaPrivateKey: 'file:/to/your/private/key/path',
safeheronRsaPublicKey: "<your safeheron platform public key>",
requestTimeout: 8000,
web3WalletAccountKey: "<your web3 wallet account key>",
web3WalletEVMAddress: "<your web3 wallet address>"
}
const config = {
networks: {
sepolia: {
url: '<https://1rpc.io/sepolia>',
safeheron: safeheronConfig
}
}
}
插件继承了 HttpNetworkUserConfig,在 network 配置项中添加了一个可选属性 safeheron。以上代码是一个示例配置,请按照说明修改 safeheronConfig 变量中的相关配置,并在您使用的网络中添加 safeheron 配置项。
部署合约
经过上一步的配置,您的 Hardhat 项目已经与 Safeheron 集成完毕,接下来,您就可以正常的开发、测试和部署合约了。
本文以 Hardhat 默认模板合约为示例,展示部署流程。
npx hardhat ignition deploy ./ignition/modules/xxx.ts --network sepolia
执行上述命令后,您将会在控制台看见如下消息,然后您需要打开 Safeheron App 审批并签署该笔交易。如果您的团队配置了高级策略,请通知相关审批人员进行审批。
[hardhat-safeheron]request eth_signTransaction success, please review and approve on safeheron mobile app
同时您的控制台每隔三秒左右会持续输出如下日志,代表该笔交易正在等待签署。在交易被审批并签署完成之前,请不要关闭控制台。
[hardhat-safeheron]Waiting for signature...
[hardhat-safeheron]Waiting for signature...
[hardhat-safeheron]Waiting for signature...
...
一旦交易在 Safeheron App 上完成了审批和签名,您的控制台上就会显示已收到签名结果,Hardhat 会通过您在配置文件中定义的 rpc url 将交易广播上链,完成合约部署。此过程可能需要一分钟左右。一旦部署成功,您的控制台会出现类似如下消息:
[ <Contract Module> ] successfully deployed 🚀
Deployed Addresses
<Contract Module>#<Contract_Name> - <contract_address>
使用 Truffle-Safeheron 插件
安装 Truffle
npm i -g truffle
您可以使用 truffle init 创建一个没有智能合约的空项目,但对于入门者,可以选择 Truffle Boxes (https://archive.trufflesuite.com/boxes/) 里的模板来快速创建一个 Truffle 项目。本文将以 MetaCoin Box (https://archive.trufflesuite.com/boxes/metacoin/) 模板进行举例说明。
创建一个空目录,下载 MetaCoin Box 项目模板:
mkdir truffle-demo
truffle unbox metacoin ./
连接 Safeheron
安装 truffle-safeheron 插件。
npm install @safeheron/truffle-safeheron
编辑 truffle-config.js 文件。
const SafeheronProvider = require("@safeheron/truffle-safeheron");
const safeheronConfig = {
baseUrl: '',
apiKey: '',
rsaPrivateKey: 'file:/to/your/private/key/path',
safeheronRsaPublicKey: "",
requestTimeout: 8000,
web3WalletAccountKey: "",
web3WalletEVMAddress: ""
}
modules.exports = {
networks: {
sepolia: {
provider: () => new SafeheronProvider('', safeheronConfig),
network_id: "11155111",
networkCheckTimeout: 10000,
// This property must set to true!
skipDryRun: true
},
}
}
部署合约
truffle migrate --network sepolia
执行上述命令后,您将会在控制台看见如下消息,然后您需要打开 Safeheron App 审批并签署该笔交易。如果您的团队配置了高级策略,请通知相关审批人员进行审批。
[hardhat-safeheron]request eth_signTransaction success, please review and approve on safeheron mobile app
同时您的控制台每隔三秒左右会持续输出如下日志,代表该笔交易正在等待签署。在交易被审批并签署完成之前,请不要关闭控制台。
[truffle-safeheron]Waiting for signature...
[truffle-safeheron]Waiting for signature...
[truffle-safeheron]Waiting for signature...
...
一旦交易在 Safeheron App 上完成了审批和签名,您的控制台上就会显示已收到签名结果,Truffle 会通过您在配置文件中定义的 rpc url 将交易广播上链,完成合约部署。
关于 Safeheron
Safeheron 是一家开源、透明的数字资产自托管服务平台,成立于 2019 年,总部位于新加坡。基于安全多方计算(MPC)和可信执行环境(TEE)技术,Safeheron 为机构客户提供最高安全等级的机构级数字资产自托管服务与 MPC 私有化解决方案,使客户 100% 掌握私钥和资产控制权,并提升资产安全和管理效率。
Safeheron 已与 MetaMask、Hashkey Capital、dtcpay、Rong360 等多家机构合作,并自 2022 年 7 月发布以来安全转移价值超 300 亿美元的数字资产。
Safeheron 的愿景是成为行业领先的数字资产自托管安全基础设施。
Keep Your Funds
Safe From Here On
Twitter|@Safeheron
LinkedIn|Safeheron
公众号|安全鹭
【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。