0

我对编码很陌生,在测试这个合同是否可以编译时,我遇到了这个错误。我已经尝试在函数中添加一组括号,但感觉就像我越是尝试听布朗尼,它就会开始对我看起来越陌生。我错过了什么吗?这是错误:

contract/AdvancedCollectible.sol:28:18: ParserError: Expected '(' but got identifier function createCollectible(uint256 userProvidedSeed, string memory 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; 
            }
    }

感谢大家的帮助!

4

1 回答 1

0

您的构造函数中有一个额外的花括号{。此外,父构造函数调用不应以分号结尾;

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;
}
于 2021-12-17T08:26:24.693 回答