2

そのチュートリアルのブログ投稿https://blog.topl.me/how-to-deploy-solidity/に従って、solcjs を使用してコントラクトをデプロイしようとしています。

ここに私のコードがあります

const web3 = new Web3();
web3.setProvider(new web3.providers.HttpProvider("http://localhost:8545"));


async function compileAndDeploy() {
    let ambrosiaContract;
    try {
        let contract = await fs.readFileSync( path.join(__dirname, './Ambrosia.sol') );
        let Ambrosia = contract.toString();
        let input = {};
        input[ path.join(__dirname, './Ambrosia.sol')] = Ambrosia;

        console.log('> Compiling Storage');
        let output = solc.compile({sources: input}, 1);

        console.log(output.contracts, output.formal);
        ambrosiaContract = output.contracts['Ambrosia'];
    }
    catch (e) {
        console.log(e);
    }
    console.log('deploying...')
    let ambrosiaInstance = await deployStorage(ambrosiaContract)
    console.log('...deployed at ' + ambrosiaInstance.address)
}

compileAndDeploy();

実際にスクリプトを実行すると、コンパイラからそのエラーが返されます。

エラー: タイプ "bytes32" は状態変数ではサポートされていません。\n マッピング (アドレス => bytes32) レストラン;\n

これが私の契約コードです。

pragma solidity ^0.4.4;

contract Ambrosia {

    mapping (address => bytes32) restaurants;

    address _owner;

    event Transfer(address indexed _from, address indexed _to, uint256 _value); // listen to that event whenever a transfer has been made..

    event Order(address indexed _from, address indexed _to, uint256 _value); // listen to that event whenever an order is triggered

    function Ambrosia() {
        _owner = msg.sender;
    }
}

私は solcjs バージョン 0.4.4 を使用しています。エラーはノード クライアントに依存しません。開発ネットワーク上の geth と js-eth の両方で発生します。

4

1 に答える 1

1

このエラーは、Solidity正式検証ツールからのものです。現在のところ、Solidity の機能のほとんどはサポートされていないため、無視してかまいません。

実際のコンパイルエラーはoutput.errors配列で返されます。タイプミスを追加して、これを実行してみてください:

const output = solc.compile({sources: input}, 1);
console.log(output.errors);
于 2017-01-11T06:53:05.873 に答える