部署智能合约的时候,环境选择remixVM(shanghai)能够成功部署

【求解答】但是我想连接到本地的ganche环境部署失败
 【求解答】报错如下:
【求解答】报错如下:

// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.7;
import "@openzeppelin/contracts/utils/math/SafeMath.sol"; contract MusicChain { // 音乐作品结构体 struct Music{ uint id; // 作品id uint[] parents; // 父作品id uint[] children; // 子作品id bytes cid; // 作品内容的aliyun对象存储地址 }
这是sol文件
// 字符串的转换
mapping(uint => address[]) ownerMap;    // Music的版权持有人
mapping(uint => address[]) authMap;     // Music的授权人
mapping(uint => address[]) nftMap;      // Nft的所有者
Music[] musics;
function toString(address _value) public pure returns(string memory) {
    return toString(abi.encodePacked(_value));
}
function toString(uint256 _value) public pure returns(string memory) {
    return toString(abi.encodePacked(_value));
}
function toString(bytes32 _value) public pure returns(string memory) {
    return toString(abi.encodePacked(_value));
}
function toString(bytes memory _data) public pure returns(string memory) {
    bytes memory alphabet = "0123456789abcdef";
    bytes memory str = new bytes(2 + _data.length * 2);
    str[0] = "0";
    str[1] = "x";
    for (uint i = 0; i < _data.length; i++) {
        str[2+i*2] = alphabet[uint(uint8(_data[i] >> 4))];
        str[3+i*2] = alphabet[uint(uint8(_data[i] & 0x0f))];
    }
    return string(str);
}
function bytesToBytes46(bytes memory _bs) pure public returns (bytes1[46] memory) {
    bytes1[46] memory result;
    for (uint i = 0; i < 46; i++) {
        result[i] = _bs[i];
    }
    return result;
}
function bytes46ToBytes(bytes1[46] memory _bs) pure public returns (bytes memory) {
    bytes memory result = new bytes(46);
    for (uint i = 0; i < 46; i++) {
        result[i] = _bs[i];
    }
    return result;
}
// 改变作品归属
function changeOwn(bytes calldata _cid) public{
    uint id = getIdByCid(_cid);
    require(id != 2**256 - 1, "this cid is invalid");
    address[] storage temp = ownerMap[id];
    temp.push(msg.sender);
}
// 音乐版权写入区块链
function createMusic(bytes calldata _file_hash) public  returns(uint){
    require(getIdByCid(_file_hash) == 2 ** 256 - 1, "already exists");
    Music storage curMusic = musics.push();
    uint curId = musics.length-1;
    curMusic.id = curId;
    curMusic.cid = new bytes(46);
    curMusic.cid = _file_hash;
    address[] storage temp =  ownerMap[curId];
    temp.push(msg.sender);
    return curId;
}
//改编关系写入区块链
function createAdapt(bytes calldata _cid,bytes calldata _cidParent) public{
    uint parentId = getIdByCid(_cidParent);
    require(parentId != 2**256-1,"this cid is invalid");
    uint curId = createMusic(_cid);
    // 父类音乐作品中添加子类
    musics[parentId].children.push(curId);
    // 子类音乐作品中添加父类
    musics[curId].parents.push(parentId);
}
// 获得一个音乐作品当前的归属
function getMusicAccount(bytes calldata _cid) view public returns(address){
    uint id = getIdByCid(_cid);
    require(id != 2**256 - 1, "this cid is invalid");
    address[] storage temp = ownerMap[id];
    return temp[temp.length-1];
}
// 授权一个音乐
function authMusic(bytes calldata _cid) public{
    uint id = getIdByCid(_cid);
    require(id != 2**256 - 1, "this cid is invalid");
    address[] storage temp = authMap[id];
    temp.push(msg.sender);
}
// 指定一个NFT
function createNft(bytes calldata _cid) public{
    uint id = getIdByCid(_cid);
    require(id != 2**256-1, "this cid is invalid");
    address[] storage temp = nftMap[id];
    temp.push(msg.sender);
}
// 获得一个NFT的归属
function getNftAccount(bytes calldata _cid) view public returns(address){
    uint id = getIdByCid(_cid);
    require(id != 2**256-1, "this cid is invalid");
    address[] memory temp = nftMap[id];
    return temp[temp.length-1];
}
// 通过cid获得音乐作品id
function getIdByCid(bytes memory _cid) view public returns(uint){
    for(uint i=0;i<musics.length;i++){
        if(keccak256(_cid) == keccak256(musics[i].cid)){
            return musics[i].id;
        }
    }
    return 2**256-1;
} 
// 测试接口
function getAllMusic() view public returns(Music[] memory){
    return musics;
}
function getAllOwnerMap(uint id) view public returns(address[] memory){
    return ownerMap[id];
}
function getAllAuthMap(uint id) view public returns(address[] memory){
    return authMap[id];
}
function getAllNftMap(uint id) view public returns(address[] memory){
    return nftMap[id];
}}