尝试编译时布朗尼解析器错误
Brownie parser error when trying to compile
我对编码很陌生,在测试这个合约是否会编译我 运行 到这个错误时。我试过在函数中添加一组括号,但感觉我越是尝试听 brownie the st运行ger 它就开始看我了。我错过了什么吗?这是错误:
contracts/AdvancedCollectible.sol:28:18: ParserError: 应为 '(' 但得到标识符
函数 createCollectible(uint256 userProvidedSeed,字符串内存 tokenURI)
^----------------^
目前我写的内容如下:
pragma solidity 0.6.6;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@chainlink/contracts/src/v0.6/VRFConsumerBase.sol";
contract AdvancedCollectible is ERC721, VRFConsumerBase {
bytes32 internal keyHash;
uint256 internal fee;
uint256 public tokenCounter;
enum Color {Red, Blue, Green}
// add other things
mapping(bytes32 => address) public requestIdToSender;
mapping(bytes32 => string) public requestIdToTokenURI;
mapping(uint256 => Color) public tokenIdToColor;
mapping(bytes32 => uint256) public requestIdToTokenId;
event requestedCollectible(bytes32 indexed requestId);
constructor(address _VRFCoordinator, address _LinkToken, bytes32 _keyhash) public {
VRFConsumerBase(_VRFCoordinator, _LinkToken);
ERC721("Snails", "SNAIL");
{
keyHash = _keyhash;
fee = 0.1 * 10**18; // 0.1 LINK
tokenCounter = 0;
}
function createCollectible(uint256 userProvidedSeed, string memory tokenURI)
public returns (bytes32)
{
bytes32 requestID = requestRandomness(keyhash, fee, userProvidedSeed);
requestIdToSender[requestId] = msg.sender;
requestIdToTokenURI [requestId] = tokenURI;
emit requestedCollectible(requestId);
}
function fulfillRandomness(bytes32 requestID, uint256 randomNumber) internal override{
address snailOwner = requestIdToSender[requestID];
string memory tokenURI = requestIdToTokenURI[requestId];
uint256 newItemId = tokenCounter;
_safeMint(snailOwner, newItemId);
setTokenURI(newItemID, tokenURI);
Color color = Color(randomNumber % 3);
tokenIDToColor[newItemId] = color;
requestIdToTokenId[requestID] = newItemId;
tokenCounter = tokenCounter + 1;
}
}
谢谢大家的帮助!
您的构造函数中有一个额外的花括号 {
。此外,父构造函数调用不应以分号 ;
.
结尾
constructor(address _VRFCoordinator, address _LinkToken, bytes32 _keyhash)
public // removed the extra `{`
VRFConsumerBase(_VRFCoordinator, _LinkToken) // removed the `;`
ERC721("Snails", "SNAIL") // removed the `;`
{
keyHash = _keyhash;
fee = 0.1 * 10**18; // 0.1 LINK
tokenCounter = 0;
}
我对编码很陌生,在测试这个合约是否会编译我 运行 到这个错误时。我试过在函数中添加一组括号,但感觉我越是尝试听 brownie the st运行ger 它就开始看我了。我错过了什么吗?这是错误:
contracts/AdvancedCollectible.sol:28:18: ParserError: 应为 '(' 但得到标识符 函数 createCollectible(uint256 userProvidedSeed,字符串内存 tokenURI) ^----------------^
目前我写的内容如下:
pragma solidity 0.6.6;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@chainlink/contracts/src/v0.6/VRFConsumerBase.sol";
contract AdvancedCollectible is ERC721, VRFConsumerBase {
bytes32 internal keyHash;
uint256 internal fee;
uint256 public tokenCounter;
enum Color {Red, Blue, Green}
// add other things
mapping(bytes32 => address) public requestIdToSender;
mapping(bytes32 => string) public requestIdToTokenURI;
mapping(uint256 => Color) public tokenIdToColor;
mapping(bytes32 => uint256) public requestIdToTokenId;
event requestedCollectible(bytes32 indexed requestId);
constructor(address _VRFCoordinator, address _LinkToken, bytes32 _keyhash) public {
VRFConsumerBase(_VRFCoordinator, _LinkToken);
ERC721("Snails", "SNAIL");
{
keyHash = _keyhash;
fee = 0.1 * 10**18; // 0.1 LINK
tokenCounter = 0;
}
function createCollectible(uint256 userProvidedSeed, string memory tokenURI)
public returns (bytes32)
{
bytes32 requestID = requestRandomness(keyhash, fee, userProvidedSeed);
requestIdToSender[requestId] = msg.sender;
requestIdToTokenURI [requestId] = tokenURI;
emit requestedCollectible(requestId);
}
function fulfillRandomness(bytes32 requestID, uint256 randomNumber) internal override{
address snailOwner = requestIdToSender[requestID];
string memory tokenURI = requestIdToTokenURI[requestId];
uint256 newItemId = tokenCounter;
_safeMint(snailOwner, newItemId);
setTokenURI(newItemID, tokenURI);
Color color = Color(randomNumber % 3);
tokenIDToColor[newItemId] = color;
requestIdToTokenId[requestID] = newItemId;
tokenCounter = tokenCounter + 1;
}
}
谢谢大家的帮助!
您的构造函数中有一个额外的花括号 {
。此外,父构造函数调用不应以分号 ;
.
constructor(address _VRFCoordinator, address _LinkToken, bytes32 _keyhash)
public // removed the extra `{`
VRFConsumerBase(_VRFCoordinator, _LinkToken) // removed the `;`
ERC721("Snails", "SNAIL") // removed the `;`
{
keyHash = _keyhash;
fee = 0.1 * 10**18; // 0.1 LINK
tokenCounter = 0;
}