我在ethers.js库中使用了安全帽,并且我注意到构造函数的参数是在智能契约部署期间传递的,而不是在契约实例化期间传递的。此外,在缺少智能契约构造函数的参数时,部署失败。
现在,我有一个硬编码键,它必须与传递给我的智能契约构造函数的参数相匹配,如下所示:
constructor(string memory authKey) {
if(keccak256(byte(authKey)) != keccak256("&65I_am_a_sample_hard_coded_key&#£@"))) {
// do not deploy (or just fail)
// or at least, invalidate this contract
}
}
我用钥匙检查作为一种授权形式。
如果传递的密钥参数与我的硬编码密钥不匹配,是否有可能阻止部署(如果可能的话,在没有传递参数的情况下失败)?如果没有,如果在部署过程中提供了错误的密钥作为参数,那么智能契约是否会变得无效?
发布于 2023-01-21 11:16:02
您只需像下面这样使用revert命令:
revert(‘Reverted due to bad constructor parameters’);
或者不使用if子句,您只需这样做:
require("condition", "Reverted due to bad constructor parameters");
第三种选择(在关键问题发生时使用这个选项,因为它消耗了所有的事务气体):
assert("condition");
因此,契约创建事务与任何其他事务一样,构造函数只是另一个函数,在部署时调用它,因此在这里适用的规则与正常函数的规则相同。
https://ethereum.stackexchange.com/questions/143410
复制相似问题