constructor - ChainID Solidity 版本 0.6.12
问题描述
我已经在许多工厂合同中看到了这段代码:
constructor() public {
uint chainId;
assembly {
chainId := chainid
}
DOMAIN_SEPARATOR = keccak256(
abi.encode(
keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'),
keccak256(bytes(name)),
keccak256(bytes('1')),
chainId,
address(this)
)
);
}
但是,这在我使用时有效,
pragma solidity =0.5.16;
但如果我使用pragma solidity =0.6.12;
,我会收到错误消息:
ParseError: Expected '(' but got '}' } ^
我尝试执行以下操作:
constructor() public {
uint chainId;
assembly {
chainId := chainid()
}...
但是后来我在变量和函数上遇到多个错误,说:
TypeError: overriding public state variable is missing string public constant name = ...
我如何在solidity 0.6.12版本中编写流水线?
谢谢,
使用版本 0.5.16 这不是一个选项,因为许多导入使用 0.6.12,它们将无法工作......
解决方案
//SPDX-License-Identifier: MIT
pragma solidity =0.6.12;
contract Test {
string public constant name = "Your Contract name";
constructor() public {
uint chainId;
assembly {
chainId := chainid()
}
bytes32 DOMAIN_SEPARATOR;
DOMAIN_SEPARATOR = keccak256(
abi.encode(
keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'),
keccak256(bytes(name)),
keccak256(bytes('1')),
chainId,
address(this)
)
);}}
尝试这个。如果您将代码升级到 0.8.0 及更高版本,则全局命名空间中有一个可用的变量,称为
block.chainid
推荐阅读
- neo4j - 查询的目的是什么:对相同类型的不同节点的特定属性求和
- jquery - jQuery 元素 outerWidth() 返回 0
- reactjs - react native navigation3 我想隐藏底部标签导航的一个标签
- javascript - 我可以从 eventBus 侦听器发送自定义事件吗?
- python - 使用 Stripe 和 Python-Flask 的订阅示例?
- php - 使用foreach时如何只显示一次数据
- wildfly - 消息传输过程中的sccp层问题
- scala - Scala 嵌套函数 - 调用
- amazon-ec2 - 通过 RESTful API 公开的云提供商 SLA
- html - 将 div 中的图像元素居中